Skip to content

Commit ca20eaa

Browse files
committed
[Fix] handle SlowBuffers in node 0.10
1 parent c7bc986 commit ca20eaa

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

index.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ var useFromArrayBuffer = useArrayBuffer && (Buffer.prototype instanceof Uint8Arr
2020

2121
module.exports = function toBuffer(data, encoding) {
2222
if (Buffer.isBuffer(data)) {
23+
if (data.constructor && !('isBuffer' in data)) {
24+
// probably a SlowBuffer
25+
return Buffer.from(data);
26+
}
2327
return data;
2428
}
2529

@@ -93,9 +97,9 @@ module.exports = function toBuffer(data, encoding) {
9397
if (
9498
isArr || (
9599
Buffer.isBuffer(data)
96-
&& data.constructor
97-
&& typeof data.constructor.isBuffer === 'function'
98-
&& data.constructor.isBuffer(data)
100+
&& data.constructor
101+
&& typeof data.constructor.isBuffer === 'function'
102+
&& data.constructor.isBuffer(data)
99103
)
100104
) {
101105
return Buffer.from(data);

test/index.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,31 @@ var availableTypedArrays = require('available-typed-arrays')();
55
var forEach = require('for-each');
66
var typedArrayBuffer = require('typed-array-buffer');
77
var SafeBuffer = require('safe-buffer').Buffer;
8+
var SlowBuffer = require('buffer').SlowBuffer;
89

910
var toBuffer = require('../');
1011
var fixtures = require('./fixtures.json');
1112

1213
test('buffer returns buffer', function (t) {
13-
t.deepEqual(toBuffer(new Buffer('hi')), new Buffer('hi'));
14+
var result = toBuffer(new Buffer('hi'));
15+
16+
t.deepEqual(result, new Buffer('hi'));
17+
t.ok(result instanceof Buffer, 'is a Buffer');
18+
t.notOk(result instanceof SlowBuffer, 'not a SlowBuffer');
19+
20+
t.end();
21+
});
22+
23+
test('SlowBuffer returns Buffer', { skip: SlowBuffer.name === 'deprecated' }, function (t) {
24+
var slow = new SlowBuffer(2);
25+
slow[0] = 7;
26+
slow[1] = 8;
27+
var result = toBuffer(slow);
28+
29+
t.deepEqual(result, new Buffer([7, 8]));
30+
t.ok(result instanceof Buffer, 'is a Buffer');
31+
t.notOk(result instanceof SlowBuffer, 'not a SlowBuffer');
32+
1433
t.end();
1534
});
1635

0 commit comments

Comments
 (0)