assert,util: fix deep comparing invalid dates skipping properties

The property comparison of invalid dates regressed when starting
to handle invalid dates as being equal.

PR-URL: https://github.com/nodejs/node/pull/61076
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
This commit is contained in:
Ruben Bridgewater
2025-12-15 17:56:36 +01:00
committed by Node.js GitHub Bot
parent a968e4e672
commit fc1d6d6b4c
2 changed files with 15 additions and 4 deletions

View File

@@ -304,9 +304,9 @@ function objectComparisonStart(val1, val2, mode, memos) {
}
const time1 = DatePrototypeGetTime(val1);
const time2 = DatePrototypeGetTime(val2);
if (time1 !== time2) {
// eslint-disable-next-line no-self-compare
return time1 !== time1 && time2 !== time2;
// eslint-disable-next-line no-self-compare
if (time1 !== time2 && (time1 === time1 || time2 === time2)) {
return false;
}
} else if (isRegExp(val1)) {
if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {

View File

@@ -752,7 +752,18 @@ test('Additional tests', () => {
assertNotDeepOrStrict(new Date(), new Date(2000, 3, 14));
assertDeepAndStrictEqual(new Date('foo'), new Date('bar'));
{
// Invalid dates deep comparison.
const date1 = new Date('foo');
const date2 = new Date('bar');
date1.foo = true;
date2.foo = true;
assertDeepAndStrictEqual(date1, date2);
date1.bar = false;
date2.bar = true;
assertNotDeepOrStrict(date1, date2);
}
assertDeepAndStrictEqual(/a/, /a/);
assertDeepAndStrictEqual(/a/g, /a/g);