Browse Source

assert: Ensure reflexivity of deepEqual

Ensure that the behavior of `assert.deepEqual` does not depend on
argument ordering  when comparing an `arguments` object with a
non-`arguments` object.
v0.10.27-release
Mike Pennisi 11 years ago
committed by Fedor Indutny
parent
commit
aae51ecf7d
  1. 9
      lib/assert.js
  2. 5
      test/simple/test-assert.js

9
lib/assert.js

@ -199,10 +199,11 @@ function objEquiv(a, b) {
if (a.prototype !== b.prototype) return false;
//~~~I've managed to break Object.keys through screwy arguments passing.
// Converting to array solves the problem.
if (isArguments(a)) {
if (!isArguments(b)) {
return false;
}
var aIsArgs = isArguments(a),
bIsArgs = isArguments(b);
if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
return false;
if (aIsArgs) {
a = pSlice.call(a);
b = pSlice.call(b);
return _deepEqual(a, b);

5
test/simple/test-assert.js

@ -249,6 +249,11 @@ try {
gotError = true;
}
// GH-7178. Ensure reflexivity of deepEqual with `arguments` objects.
var args = (function() { return arguments; })();
a.throws(makeBlock(a.deepEqual, [], args));
a.throws(makeBlock(a.deepEqual, args, []));
console.log('All OK');
assert.ok(gotError);

Loading…
Cancel
Save