summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pennisi <mike@mikepennisi.com>2014-02-24 14:16:40 -0500
committerFedor Indutny <fedor.indutny@gmail.com>2014-02-25 20:32:49 +0400
commitaae51ecf7d407b2fb56c1f3e1edf91a16940c973 (patch)
tree43275f90f20cafe15f0b167461141027fb37f030
parent70ea5bac431ae136368fc2c88e4bbe9e4b93a9aa (diff)
downloadnode-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.js9
-rw-r--r--test/simple/test-assert.js5
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);