Skip to content

Commit 0f1ac5f

Browse files
committed
fix: handle buffers in Node v0.10
- The v1.0.0 refactor introduced a bug with handling equality comparisons of buffers in Node v0.10. In later versions of Node, buffers are correctly detected as iterables, but in Node v0.10 they are incorrectly detected as plain objects, leading to erroneous results. This fix adds support for buffers in Node v0.10 via `Buffer.isBuffer`. The logic added by this fix can safely be removed once support for Node v0.10 is dropped, but the new tests should be kept.
1 parent f88bcf8 commit 0f1ac5f

2 files changed

Lines changed: 28 additions & 0 deletions

File tree

index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,13 @@ function keysEqual(leftHandOperand, rightHandOperand, keys, options) {
405405
*/
406406

407407
function objectEqual(leftHandOperand, rightHandOperand, options) {
408+
// This block can be removed once support for Node v0.10 is dropped because
409+
// buffers are properly detected as iterables in later versions.
410+
if (typeof Buffer === 'function' &&
411+
typeof Buffer.isBuffer === 'function' &&
412+
Buffer.isBuffer(leftHandOperand)) {
413+
return iterableEqual(leftHandOperand, rightHandOperand, options);
414+
}
408415
var leftHandKeys = getEnumerableKeys(leftHandOperand);
409416
var rightHandKeys = getEnumerableKeys(rightHandOperand);
410417
if (leftHandKeys.length && leftHandKeys.length === rightHandKeys.length) {

test/index.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
var assert = require('simple-assert');
33
var eql = require('..');
44
var MemoizeMap = require('..').MemoizeMap;
5+
function describeIf(condition) {
6+
return condition ? describe : describe.skip;
7+
}
58
describe('Generic', function () {
69

710
describe('strings', function () {
@@ -364,6 +367,24 @@ describe('Generic', function () {
364367

365368
});
366369

370+
describe('Node Specific', function () {
371+
372+
describeIf(typeof Buffer === 'function')('buffers', function () {
373+
374+
it('returns true for same buffers', function () {
375+
assert(eql(new Buffer([ 1 ]), new Buffer([ 1 ])) === true,
376+
'eql(new Buffer([ 1 ]), new Buffer([ 1 ])) === true');
377+
});
378+
379+
it('returns false for different buffers', function () {
380+
assert(eql(new Buffer([ 1 ]), new Buffer([ 2 ])) === false,
381+
'eql(new Buffer([ 1 ]), new Buffer([ 2 ])) === false');
382+
});
383+
384+
});
385+
386+
});
387+
367388
describe('Memoize', function () {
368389

369390
it('returns true if MemoizeMap says so', function () {

0 commit comments

Comments
 (0)