util,assert: fix boxed primitives bug

Currently the comparison could throw an error in case a boxed
primitive has no valueOf function on one side of the assert call.

PR-URL: https://github.com/nodejs/node/pull/22243
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: George Adams <george.adams@uk.ibm.com>
This commit is contained in:
Ruben Bridgewater 2018-08-03 20:46:40 +02:00 committed by George Adams
parent 0aae34f52e
commit c7ca199c38
No known key found for this signature in database
GPG Key ID: 7B8D7E4421A0916D
2 changed files with 10 additions and 0 deletions

View File

@ -120,6 +120,9 @@ function strictDeepEqual(val1, val2, memos) {
const val1Value = val1.valueOf();
// Note: Boxed string keys are going to be compared again by Object.keys
if (val1Value !== val1) {
if (typeof val2.valueOf !== 'function') {
return false;
}
if (!innerDeepEqual(val1Value, val2.valueOf(), true))
return false;
// Fast path for boxed primitives

View File

@ -890,3 +890,10 @@ assert.deepStrictEqual(obj1, obj2);
);
util.inspect.defaultOptions = tmp;
}
// Basic valueOf check.
{
const a = new String(1);
a.valueOf = undefined;
assertNotDeepOrStrict(a, new String(1));
}