Repository navigation
test-hash-seed fails #231
Copy link
Copy link
Closed
Description
https://github.com/nodejs/node-v8/runs/7037723725?check_suite_focus=true
Path: pummel/test-hash-seed
Error: --- stderr ---
node:internal/errors:856
const err = new Error(message);
^
Error: Command failed: /home/runner/work/node-v8/node-v8/out/Release/node /home/runner/work/node-v8/node-v8/test/fixtures/guess-hash-seed.js
/home/runner/work/node-v8/node-v8/test/fixtures/guess-hash-seed.js:163
throw new Error('no candidates remaining');
^
Error: no candidates remaining
at Object.<anonymous> (/home/runner/work/node-v8/node-v8/test/fixtures/guess-hash-seed.js:163:9)
at Module._compile (node:internal/modules/cjs/loader:1116:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1170:10)
at Module.load (node:internal/modules/cjs/loader:994:32)
at Module._load (node:internal/modules/cjs/loader:834:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:17:47
Node.js v19.0.0-pre
at ChildProcess.exithandler (node:child_process:389:12)
at ChildProcess.emit (node:events:537:28)
at maybeClose (node:internal/child_process:1091:16)
at ChildProcess._handle.onexit (node:internal/child_process:302:5) {
code: 1,
killed: false,
signal: null,
cmd: '/home/runner/work/node-v8/node-v8/out/Release/node /home/runner/work/node-v8/node-v8/test/fixtures/guess-hash-seed.js',
stdout: '',
stderr: '/home/runner/work/node-v8/node-v8/test/fixtures/guess-hash-seed.js:163\n' +
" throw new Error('no candidates remaining');\n" +
' ^\n' +
'\n' +
'Error: no candidates remaining\n' +
' at Object.<anonymous> (/home/runner/work/node-v8/node-v8/test/fixtures/guess-hash-seed.js:163:9)\n' +
' at Module._compile (node:internal/modules/cjs/loader:1116:14)\n' +
' at Module._extensions..js (node:internal/modules/cjs/loader:1170:10)\n' +
' at Module.load (node:internal/modules/cjs/loader:994:32)\n' +
' at Module._load (node:internal/modules/cjs/loader:834:12)\n' +
' at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)\n' +
' at node:internal/main/run_main_module:17:47\n' +
'\n' +
'Node.js v19.0.0-pre\n'
}
Node.js v19.0.0-pre
Command: out/Release/node /home/runner/work/node-v8/node-v8/test/pummel/test-hash-seed.js
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
targos commentedon Jun 24, 2022
So, it seems that the hash seed cannot be guessed anymore? I don't know who to ping about that @nodejs/v8
camillobruni commentedon Jun 24, 2022
I don't think we have any guarantee on what hashing function / seeds we use internally in V8.
What's the purpose of this test actually?
targos commentedon Jun 24, 2022
The test verifies that two Node.js processes do not use the same hash seed.
It's related to this security release: https://nodejs.org/en/blog/vulnerability/july-2017-security-releases/#node-js-specific-security-flaws
bnoordhuis commentedon Jun 25, 2022
I didn't look too deeply into this but that test learns the hash seed by observing insertion time into a Set.
It leans heavily on the observation that
set.has(value)was an ersatz compiler barrier to V8. If V8 learned to optimize around has() calls, then that probably throws off the timing enough to stop the algorithm from converging.I was going to suggest starting node with
--nooptbut when I tried that locally, it ran so slow I gave up after 10 minutes.targos commentedon Jul 11, 2022
I'm able to make the test pass again with the following changes:
Is that acceptable?
camillobruni commentedon Jul 11, 2022
I guess that will work.
However, we generally don't have any guarantees for
--allow-natives-syntaxand this might break at any point in the future.targos commentedon Jul 12, 2022
Done, thank you.