diff options
author | Mike Pennisi <mike@mikepennisi.com> | 2014-02-24 14:16:40 -0500 |
---|---|---|
committer | Fedor Indutny <fedor.indutny@gmail.com> | 2014-02-25 20:32:49 +0400 |
commit | aae51ecf7d407b2fb56c1f3e1edf91a16940c973 (patch) | |
tree | 43275f90f20cafe15f0b167461141027fb37f030 | |
parent | 70ea5bac431ae136368fc2c88e4bbe9e4b93a9aa (diff) | |
download | node-aae51ecf7d407b2fb56c1f3e1edf91a16940c973.tar.gz |
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.
-rw-r--r-- | lib/assert.js | 9 | ||||
-rw-r--r-- | test/simple/test-assert.js | 5 |
2 files changed, 10 insertions, 4 deletions
diff --git a/lib/assert.js b/lib/assert.js index 11fef455a..52b89baef 100644 --- a/lib/assert.js +++ b/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); diff --git a/test/simple/test-assert.js b/test/simple/test-assert.js index 2885858cf..6b8350095 100644 --- a/test/simple/test-assert.js +++ b/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); |