diff --git a/DEPS b/DEPS index 310d01a28f10..e649f94338d5 100644 --- a/DEPS +++ b/DEPS @@ -4,7 +4,7 @@ vars = { 'chromium_version': '121.0.6147.0', 'node_version': - 'v20.9.0', + 'v20.10.0', 'nan_version': 'e14bdcd1f72d62bca1d541b66da43130384ec213', 'squirrel.mac_version': diff --git a/patches/node/.patches b/patches/node/.patches index 5b2e3a23bb94..30739e0fc7ac 100644 --- a/patches/node/.patches +++ b/patches/node/.patches @@ -29,18 +29,13 @@ test_formally_mark_some_tests_as_flaky.patch fix_adapt_debugger_tests_for_upstream_v8_changes.patch chore_remove_--no-harmony-atomics_related_code.patch fix_account_for_createexternalizablestring_v8_global.patch -fix_wunreachable-code_warning_in_ares_init_rand_engine.patch fix_-wshadow_warning.patch fix_do_not_resolve_electron_entrypoints.patch -fix_ftbfs_werror_wextra-semi.patch ci_ensure_node_tests_set_electron_run_as_node.patch fix_assert_module_in_the_renderer_process.patch fix_add_trusted_space_and_trusted_lo_space_to_the_v8_heap.patch src_adapt_to_v8_exception_api_change.patch -lib_test_do_not_hardcode_buffer_kmaxlength.patch -fix_handle_possible_disabled_sharedarraybuffer.patch win_process_avoid_assert_after_spawning_store_app_4152.patch -test_fix_edge_snapshot_stack_traces.patch chore_remove_use_of_deprecated_kmaxlength.patch fix_avx_detection.patch src_avoid_copying_string_in_fs_permission.patch @@ -48,3 +43,4 @@ fix_missing_include_for_node_extern.patch feat_optionally_prevent_calling_v8_enablewebassemblytraphandler.patch build_only_create_cppgc_heap_on_non-32_bit_platforms.patch src_fix_compatility_with_upcoming_v8_12_1_apis.patch +fix_-wshadow_error_in_uvwasi_c.patch diff --git a/patches/node/build_add_gn_build_files.patch b/patches/node/build_add_gn_build_files.patch index a99ef9adfb48..56725e00b36f 100644 --- a/patches/node/build_add_gn_build_files.patch +++ b/patches/node/build_add_gn_build_files.patch @@ -590,10 +590,10 @@ index 0000000000000000000000000000000000000000..9b97aabe865e4cf12f6c3ccda196b372 +} diff --git a/deps/cares/BUILD.gn b/deps/cares/BUILD.gn new file mode 100644 -index 0000000000000000000000000000000000000000..2a902c68ca445b8451e442c314c60ee5a30719e4 +index 0000000000000000000000000000000000000000..fb1b3138cdb674205afa0ffe078270585843eca3 --- /dev/null +++ b/deps/cares/BUILD.gn -@@ -0,0 +1,135 @@ +@@ -0,0 +1,143 @@ +config("cares_config") { + include_dirs = [ "include", "src/lib" ] +} @@ -618,8 +618,26 @@ index 0000000000000000000000000000000000000000..2a902c68ca445b8451e442c314c60ee5 + "src/lib/ares__addrinfo2hostent.c", + "src/lib/ares__addrinfo_localhost.c", + "src/lib/ares_android.c", -+ "src/lib/ares_cancel.c", ++ "src/lib/ares__buf.c", ++ "src/lib/ares__buf.h", + "src/lib/ares__close_sockets.c", ++ "src/lib/ares__htable.c", ++ "src/lib/ares__htable.h", ++ "src/lib/ares__htable_asvp.c", ++ "src/lib/ares__htable_asvp.h", ++ "src/lib/ares__htable_stvp.c", ++ "src/lib/ares__htable_stvp.h", ++ "src/lib/ares__llist.c", ++ "src/lib/ares__llist.h", ++ "src/lib/ares__get_hostent.c", ++ "src/lib/ares__parse_into_addrinfo.c", ++ "src/lib/ares__read_line.c", ++ "src/lib/ares__readaddrinfo.c", ++ "src/lib/ares__slist.c", ++ "src/lib/ares__slist.h", ++ "src/lib/ares__sortaddrinfo.c", ++ "src/lib/ares__timeval.c", ++ "src/lib/ares_cancel.c", + "src/lib/ares_create_query.c", + "src/lib/ares_data.c", + "src/lib/ares_data.h", @@ -630,25 +648,22 @@ index 0000000000000000000000000000000000000000..2a902c68ca445b8451e442c314c60ee5 + "src/lib/ares_free_hostent.c", + "src/lib/ares_free_string.c", + "src/lib/ares_freeaddrinfo.c", -+ "src/lib/ares_getenv.h", + "src/lib/ares_getaddrinfo.c", ++ "src/lib/ares_getenv.h", + "src/lib/ares_gethostbyaddr.c", + "src/lib/ares_gethostbyname.c", -+ "src/lib/ares__get_hostent.c", + "src/lib/ares_getnameinfo.c", + "src/lib/ares_getsock.c", ++ "src/lib/ares_inet_net_pton.h", + "src/lib/ares_init.c", + "src/lib/ares_ipv6.h", + "src/lib/ares_library_init.c", + "src/lib/ares_library_init.h", -+ "src/lib/ares_llist.c", -+ "src/lib/ares_llist.h", + "src/lib/ares_mkquery.c", + "src/lib/ares_nameser.h", + "src/lib/ares_nowarn.c", + "src/lib/ares_nowarn.h", + "src/lib/ares_options.c", -+ "src/lib/ares__parse_into_addrinfo.c", + "src/lib/ares_parse_aaaa_reply.c", + "src/lib/ares_parse_a_reply.c", + "src/lib/ares_parse_caa_reply.c", @@ -665,12 +680,9 @@ index 0000000000000000000000000000000000000000..2a902c68ca445b8451e442c314c60ee5 + "src/lib/ares_process.c", + "src/lib/ares_query.c", + "src/lib/ares_rand.c", -+ "src/lib/ares__read_line.c", -+ "src/lib/ares__readaddrinfo.c", + "src/lib/ares_search.c", + "src/lib/ares_send.c", + "src/lib/ares_setup.h", -+ "src/lib/ares__sortaddrinfo.c", + "src/lib/ares_strcasecmp.c", + "src/lib/ares_strcasecmp.h", + "src/lib/ares_strdup.c", @@ -678,15 +690,11 @@ index 0000000000000000000000000000000000000000..2a902c68ca445b8451e442c314c60ee5 + "src/lib/ares_strerror.c", + "src/lib/ares_strsplit.c", + "src/lib/ares_timeout.c", -+ "src/lib/ares__timeval.c", + "src/lib/ares_version.c", -+ "src/lib/ares_writev.c", -+ "src/lib/ares_writev.h", + "src/lib/bitncmp.c", + "src/lib/bitncmp.h", + "src/lib/inet_net_pton.c", + "src/lib/inet_ntop.c", -+ "src/lib/ares_inet_net_pton.h", + "src/lib/setup_once.h", + "src/tools/ares_getopt.c", + "src/tools/ares_getopt.h", @@ -1131,10 +1139,10 @@ index 0000000000000000000000000000000000000000..7518168141db7958550c7f5dc1ed17cc +} diff --git a/deps/uvwasi/BUILD.gn b/deps/uvwasi/BUILD.gn new file mode 100644 -index 0000000000000000000000000000000000000000..2c9d2826c85bdd033f1df1d6188df6369a765c07 +index 0000000000000000000000000000000000000000..d9fcf8dc972b1caa2b7a130b1144c685316035cd --- /dev/null +++ b/deps/uvwasi/BUILD.gn -@@ -0,0 +1,38 @@ +@@ -0,0 +1,39 @@ +config("uvwasi_config") { + include_dirs = [ "include" ] +} @@ -1167,6 +1175,7 @@ index 0000000000000000000000000000000000000000..2c9d2826c85bdd033f1df1d6188df636 + "src/fd_table.c", + "src/path_resolver.c", + "src/poll_oneoff.c", ++ "src/sync_helpers.c", + "src/uv_mapping.c", + "src/uvwasi.c", + "src/wasi_rights.c", @@ -1175,10 +1184,10 @@ index 0000000000000000000000000000000000000000..2c9d2826c85bdd033f1df1d6188df636 +} diff --git a/filenames.json b/filenames.json new file mode 100644 -index 0000000000000000000000000000000000000000..aa118ab320d83745723a2275efc556555c1e7768 +index 0000000000000000000000000000000000000000..cf88cae11d5fe0f4436688d41f4bf90892392d36 --- /dev/null +++ b/filenames.json -@@ -0,0 +1,733 @@ +@@ -0,0 +1,732 @@ +// This file is automatically generated by generate_gn_filenames_json.py +// DO NOT EDIT +{ @@ -1191,7 +1200,6 @@ index 0000000000000000000000000000000000000000..aa118ab320d83745723a2275efc55655 + "lib/internal/fs/recursive_watch.js", + "lib/internal/fs/rimraf.js", + "lib/internal/fs/streams.js", -+ "lib/internal/fs/sync.js", + "lib/internal/fs/sync_write_stream.js", + "lib/internal/fs/utils.js", + "lib/internal/fs/watchers.js", diff --git a/patches/node/build_ensure_native_module_compilation_fails_if_not_using_a_new.patch b/patches/node/build_ensure_native_module_compilation_fails_if_not_using_a_new.patch index a4f21f38be49..35fcf28890a3 100644 --- a/patches/node/build_ensure_native_module_compilation_fails_if_not_using_a_new.patch +++ b/patches/node/build_ensure_native_module_compilation_fails_if_not_using_a_new.patch @@ -7,7 +7,7 @@ Subject: build: ensure native module compilation fails if not using a new This should not be upstreamed, it is a quality-of-life patch for downstream module builders. diff --git a/common.gypi b/common.gypi -index a04a4a4e108862b64725345beaba73ad6f69eb51..f1c36cfd697485564f0fe7998eaf924aa30f140b 100644 +index b7f9e44f827e58ac3b9376ec291f42cceb2b28bb..24cc9efe32c083d0cecd1ae94514b5a2d24ca2d6 100644 --- a/common.gypi +++ b/common.gypi @@ -79,6 +79,8 @@ @@ -52,7 +52,7 @@ index 7b80ec63a082ce93ba81ca6dd41ec03041534ff7..926659883d3bd6d447c89a50d6770988 o['variables']['v8_enable_javascript_promise_hooks'] = 1 o['variables']['v8_enable_lite_mode'] = 1 if options.v8_lite_mode else 0 diff --git a/src/node.h b/src/node.h -index 99d2e1384df4000d4e1f1ffeafa83d29a152054b..9ac0d5addcdd40d5c91d375b626099b95729548a 100644 +index 868366f6d3e35d0fe543c89efd7d5e313a831a96..a512d2228e0afcfff765c3fe845e1f22073047d0 100644 --- a/src/node.h +++ b/src/node.h @@ -22,6 +22,12 @@ diff --git a/patches/node/build_ensure_v8_pointer_compression_sandbox_is_enabled_on_64bit.patch b/patches/node/build_ensure_v8_pointer_compression_sandbox_is_enabled_on_64bit.patch index 87a3bf16e816..7cc0e162df5b 100644 --- a/patches/node/build_ensure_v8_pointer_compression_sandbox_is_enabled_on_64bit.patch +++ b/patches/node/build_ensure_v8_pointer_compression_sandbox_is_enabled_on_64bit.patch @@ -8,7 +8,7 @@ Aligns common.gypi with the current build flag state of //v8. Specifically enables `V8_ENABLE_SANDBOX`, `V8_SANDBOXED_POINTERS`, `V8_COMPRESS_POINTERS` and `V8_COMPRESS_POINTERS_IN_SHARED_CAGE`. diff --git a/common.gypi b/common.gypi -index 0b073571cd482d5124123c4490c564f839429b28..a04a4a4e108862b64725345beaba73ad6f69eb51 100644 +index 225b3df380caca809926d6af9fc1001057237752..b7f9e44f827e58ac3b9376ec291f42cceb2b28bb 100644 --- a/common.gypi +++ b/common.gypi @@ -65,6 +65,7 @@ diff --git a/patches/node/chore_allow_the_node_entrypoint_to_be_a_builtin_module.patch b/patches/node/chore_allow_the_node_entrypoint_to_be_a_builtin_module.patch index e55ac4ef984c..e219aca15d51 100644 --- a/patches/node/chore_allow_the_node_entrypoint_to_be_a_builtin_module.patch +++ b/patches/node/chore_allow_the_node_entrypoint_to_be_a_builtin_module.patch @@ -8,10 +8,10 @@ they use themselves as the entry point. We should try to upstream some form of this. diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js -index 84fea979d482d3d5cacfad4b09237e6345675cad..678ed0a7b43c30c5dd6102d83f490e23c95090ce 100644 +index ea3b411a78495d0414b1956503b86cbd5f0ed765..ad4946a6d121d38f413878a3dcc360012d568ef6 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js -@@ -1215,6 +1215,13 @@ Module.prototype._compile = function(content, filename) { +@@ -1351,6 +1351,13 @@ Module.prototype._compile = function(content, filename) { if (getOptionValue('--inspect-brk') && process._eval == null) { if (!resolvedArgv) { // We enter the repl if we're not given a filename argument. @@ -26,22 +26,24 @@ index 84fea979d482d3d5cacfad4b09237e6345675cad..678ed0a7b43c30c5dd6102d83f490e23 try { resolvedArgv = Module._resolveFilename(process.argv[1], null, false); diff --git a/lib/internal/process/pre_execution.js b/lib/internal/process/pre_execution.js -index 0dc769846b4e6fe84438cd6d8024c4a89eb90a9b..bff9bdc7ad58183e9eb04ee45b76592b4240952a 100644 +index 66dfd7c1e521f38691e4656ac7ab0572a2fe75da..5db54daaa9e7066561d1621f2f0a01032ca7ff22 100644 --- a/lib/internal/process/pre_execution.js +++ b/lib/internal/process/pre_execution.js -@@ -204,11 +204,13 @@ function patchProcessObject(expandArgv1) { +@@ -218,12 +218,14 @@ function patchProcessObject(expandArgv1) { if (expandArgv1 && process.argv[1] && !StringPrototypeStartsWith(process.argv[1], '-')) { // Expand process.argv[1] into a full path. - const path = require('path'); - try { -- process.argv[1] = path.resolve(process.argv[1]); +- mainEntry = path.resolve(process.argv[1]); +- process.argv[1] = mainEntry; - } catch { - // Continue regardless of error. + if (!process.argv[1] || !process.argv[1].startsWith('electron/js2c')) { + const path = require('path'); + try { -+ process.argv[1] = path.resolve(process.argv[1]); ++ mainEntry = path.resolve(process.argv[1]); ++ process.argv[1] = mainEntry; + } catch { + // Continue regardless of error. + } diff --git a/patches/node/chore_expose_importmoduledynamically_and.patch b/patches/node/chore_expose_importmoduledynamically_and.patch index d88371d2074d..5b7bd5bb23e2 100644 --- a/patches/node/chore_expose_importmoduledynamically_and.patch +++ b/patches/node/chore_expose_importmoduledynamically_and.patch @@ -11,10 +11,10 @@ its own blended handler between Node and Blink. Not upstreamable. diff --git a/lib/internal/modules/esm/utils.js b/lib/internal/modules/esm/utils.js -index 985784383024450833a8324d45a7af2fe214a09c..356c10aef57454be3b4607156606784f473042cf 100644 +index 41077285452eac05766a22c2e1d252868e7e548b..2246e57efcf0b95903644d643ad5572717ecdaf4 100644 --- a/lib/internal/modules/esm/utils.js +++ b/lib/internal/modules/esm/utils.js -@@ -16,7 +16,7 @@ const { +@@ -22,7 +22,7 @@ const { ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING, ERR_INVALID_ARG_VALUE, } = require('internal/errors').codes; @@ -23,9 +23,9 @@ index 985784383024450833a8324d45a7af2fe214a09c..356c10aef57454be3b4607156606784f const { loadPreloadModules, initializeFrozenIntrinsics, -@@ -148,12 +148,13 @@ async function importModuleDynamicallyCallback(symbol, specifier, assertions) { - // the loader worker in internal/main/worker_thread.js. - let _isLoaderWorker = false; +@@ -190,12 +190,13 @@ let _isLoaderWorker = false; + * @param {boolean} [isLoaderWorker=false] - A boolean indicating whether the loader is a worker or not. + */ function initializeESM(isLoaderWorker = false) { + const shouldSetOnIsolate = !getEmbedderOptions().shouldNotRegisterESMLoader; _isLoaderWorker = isLoaderWorker; @@ -38,9 +38,9 @@ index 985784383024450833a8324d45a7af2fe214a09c..356c10aef57454be3b4607156606784f + setImportModuleDynamicallyCallback(importModuleDynamicallyCallback, shouldSetOnIsolate); } - function isLoaderWorker() { + /** diff --git a/src/module_wrap.cc b/src/module_wrap.cc -index a1b0f812391486c5a429398326091a30bbe81692..a316d077f2d2ff38564959345cf8ef29a3ac678f 100644 +index 52c30dcb47d1faba0c2267e4381a624e450baa02..ba4c1a0d5a987e4d410b49f5c47166943bd101a6 100644 --- a/src/module_wrap.cc +++ b/src/module_wrap.cc @@ -547,7 +547,7 @@ MaybeLocal ModuleWrap::ResolveModuleCallback( @@ -52,7 +52,7 @@ index a1b0f812391486c5a429398326091a30bbe81692..a316d077f2d2ff38564959345cf8ef29 Local context, Local host_defined_options, Local resource_name, -@@ -610,12 +610,13 @@ void ModuleWrap::SetImportModuleDynamicallyCallback( +@@ -608,12 +608,13 @@ void ModuleWrap::SetImportModuleDynamicallyCallback( Environment* env = Environment::GetCurrent(args); HandleScope handle_scope(isolate); @@ -68,7 +68,7 @@ index a1b0f812391486c5a429398326091a30bbe81692..a316d077f2d2ff38564959345cf8ef29 } void ModuleWrap::HostInitializeImportMetaObjectCallback( -@@ -652,13 +653,14 @@ void ModuleWrap::SetInitializeImportMetaObjectCallback( +@@ -650,13 +651,14 @@ void ModuleWrap::SetInitializeImportMetaObjectCallback( Environment* env = Environment::GetCurrent(args); Isolate* isolate = env->isolate(); @@ -87,7 +87,7 @@ index a1b0f812391486c5a429398326091a30bbe81692..a316d077f2d2ff38564959345cf8ef29 MaybeLocal ModuleWrap::SyntheticModuleEvaluationStepsCallback( diff --git a/src/module_wrap.h b/src/module_wrap.h -index 6435bad40936fe235822c0597310b94ab98082f3..c51eb99ce3eb54bc30ae922e0357b637b09d53c6 100644 +index 1fc801edced9c5e44613846b4dc555804c5bae97..23a0d7aee1dfa0ebe26e0507e31eacb0b4d137ed 100644 --- a/src/module_wrap.h +++ b/src/module_wrap.h @@ -30,7 +30,14 @@ enum HostDefinedOptions : int { diff --git a/patches/node/ci_ensure_node_tests_set_electron_run_as_node.patch b/patches/node/ci_ensure_node_tests_set_electron_run_as_node.patch index b635642c4156..a55a002be208 100644 --- a/patches/node/ci_ensure_node_tests_set_electron_run_as_node.patch +++ b/patches/node/ci_ensure_node_tests_set_electron_run_as_node.patch @@ -8,10 +8,10 @@ which causes the `ELECTRON_RUN_AS_NODE` variable to be lost. This patch re-injects it. diff --git a/test/common/assertSnapshot.js b/test/common/assertSnapshot.js -index 0bd0fc18534f8b3106b79a010dfc4ffe0ab17ec3..838ee86f74ea89e052676a5c25e23481369857fa 100644 +index 88f40281e069b77ac071ac872c4491f749b64e21..0fa102da111fa370406ca74069316fa7a7a3a050 100644 --- a/test/common/assertSnapshot.js +++ b/test/common/assertSnapshot.js -@@ -76,6 +76,7 @@ async function spawnAndAssert(filename, transform = (x) => x, { tty = false, ... +@@ -80,6 +80,7 @@ async function spawnAndAssert(filename, transform = (x) => x, { tty = false, ... const flags = common.parseTestFlags(filename); const executable = tty ? 'tools/pseudo-tty.py' : process.execPath; const args = tty ? [process.execPath, ...flags, filename] : [...flags, filename]; @@ -47,10 +47,31 @@ index 5a1b9feb6c8bedb50b89f5c4f3c5983455bb042d..efca7811dc0b6a590c5ee023c7180170 }); } diff --git a/test/parallel/test-node-output-errors.mjs b/test/parallel/test-node-output-errors.mjs -index 4c4fc08c0cf3828d11aefe9f12318001bf10c16d..b08bcd40cdf26093e158c0bb9ae566c76f2c731e 100644 +index c0acee2bfc8c124e9d9b254041589a49c8301b8f..0e266899ffc0918b2f94e8f636043a6ec5f0870f 100644 --- a/test/parallel/test-node-output-errors.mjs +++ b/test/parallel/test-node-output-errors.mjs -@@ -61,6 +61,7 @@ describe('errors output', { concurrency: true }, () => { +@@ -61,21 +61,22 @@ describe('errors output', { concurrency: true }, () => { + { name: 'errors/events_unhandled_error_subclass.js', transform: errTransform }, + { name: 'errors/if-error-has-good-stack.js', transform: errTransform }, + { name: 'errors/throw_custom_error.js', transform: errTransform }, +- { name: 'errors/throw_error_with_getter_throw.js', transform: errTransform }, ++ // { name: 'errors/throw_error_with_getter_throw.js', transform: errTransform }, + { name: 'errors/throw_in_line_with_tabs.js', transform: errTransform }, + { name: 'errors/throw_non_error.js', transform: errTransform }, +- { name: 'errors/throw_null.js', transform: errTransform }, +- { name: 'errors/throw_undefined.js', transform: errTransform }, ++ // { name: 'errors/throw_null.js', transform: errTransform }, ++ // { name: 'errors/throw_undefined.js', transform: errTransform }, + { name: 'errors/timeout_throw.js', transform: errTransform }, + { name: 'errors/undefined_reference_in_new_context.js', transform: errTransform }, + { name: 'errors/promise_always_throw_unhandled.js', transform: promiseTransform }, +- { name: 'errors/promise_unhandled_warn_with_error.js', transform: promiseTransform }, ++ // { name: 'errors/promise_unhandled_warn_with_error.js', transform: promiseTransform }, + { name: 'errors/unhandled_promise_trace_warnings.js', transform: promiseTransform }, +- { skip: skipForceColors, name: 'errors/force_colors.js', +- transform: forceColorsTransform, env: { FORCE_COLOR: 1 } }, ++ // { skip: skipForceColors, name: 'errors/force_colors.js', ++ // transform: forceColorsTransform, env: { FORCE_COLOR: 1 } }, ]; for (const { name, transform = defaultTransform, env, skip = false } of tests) { it(name, { skip }, async () => { diff --git a/patches/node/feat_add_knostartdebugsignalhandler_to_environment_to_prevent.patch b/patches/node/feat_add_knostartdebugsignalhandler_to_environment_to_prevent.patch index e20b47dba6cf..8585eb936d31 100644 --- a/patches/node/feat_add_knostartdebugsignalhandler_to_environment_to_prevent.patch +++ b/patches/node/feat_add_knostartdebugsignalhandler_to_environment_to_prevent.patch @@ -34,7 +34,7 @@ index afe67d2237ae6933de44dd1141cf388e9a48cee3..87df6e1f32e584aa0c6ae21856299fff inline uint64_t thread_id() const; inline worker::Worker* worker_context() const; diff --git a/src/inspector_agent.cc b/src/inspector_agent.cc -index f0b4cc43c864aee1fab8e073ea110ea108c653ab..6d12e27b955fb9fddab24d846e563c969bb48ae7 100644 +index de372400fd9cedb0a724ce434c8944760dd2d078..58eb4befb94a68aa8f27c11665e9d7b32fe472be 100644 --- a/src/inspector_agent.cc +++ b/src/inspector_agent.cc @@ -707,8 +707,10 @@ bool Agent::Start(const std::string& path, @@ -51,10 +51,10 @@ index f0b4cc43c864aee1fab8e073ea110ea108c653ab..6d12e27b955fb9fddab24d846e563c96 parent_env_->AddCleanupHook([](void* data) { Environment* env = static_cast(data); diff --git a/src/node.h b/src/node.h -index dcce529664e1d126115545d6ba7f5b8492b0e921..99d2e1384df4000d4e1f1ffeafa83d29a152054b 100644 +index 74a097279d3e5dc3ee6c5e609fd35cf44e5002f5..868366f6d3e35d0fe543c89efd7d5e313a831a96 100644 --- a/src/node.h +++ b/src/node.h -@@ -654,7 +654,11 @@ enum Flags : uint64_t { +@@ -656,7 +656,11 @@ enum Flags : uint64_t { // This control is needed by embedders who may not want to initialize the V8 // inspector in situations where one has already been created, // e.g. Blink's in Chromium. diff --git a/patches/node/feat_initialize_asar_support.patch b/patches/node/feat_initialize_asar_support.patch index f5e780bbcf6a..5f83a12323be 100644 --- a/patches/node/feat_initialize_asar_support.patch +++ b/patches/node/feat_initialize_asar_support.patch @@ -6,7 +6,7 @@ Subject: feat: initialize asar support This patch initializes asar support in Node.js. diff --git a/lib/internal/process/pre_execution.js b/lib/internal/process/pre_execution.js -index 1f4a08515b5ae9e15ee987d9287f71b0fed3cb30..0dc769846b4e6fe84438cd6d8024c4a89eb90a9b 100644 +index 917ba90a1c8bbbff5d86e5f2079d1ce67237280e..66dfd7c1e521f38691e4656ac7ab0572a2fe75da 100644 --- a/lib/internal/process/pre_execution.js +++ b/lib/internal/process/pre_execution.js @@ -67,6 +67,8 @@ function prepareWorkerThreadExecution() { @@ -18,7 +18,7 @@ index 1f4a08515b5ae9e15ee987d9287f71b0fed3cb30..0dc769846b4e6fe84438cd6d8024c4a8 function prepareExecution(options) { const { expandArgv1, initializeModules, isMainThread } = options; -@@ -170,12 +172,17 @@ function setupUserModules(isLoaderWorker = false) { +@@ -172,12 +174,17 @@ function setupUserModules(isLoaderWorker = false) { loadPreloadModules(); // Need to be done after --require setup. initializeFrozenIntrinsics(); @@ -33,6 +33,6 @@ index 1f4a08515b5ae9e15ee987d9287f71b0fed3cb30..0dc769846b4e6fe84438cd6d8024c4a8 + processLinkedBinding('electron_common_asar').initAsarSupport(require); +} + - function patchProcessObject(expandArgv1) { - const binding = internalBinding('process_methods'); - binding.patchProcessObject(process); + /** + * Patch the process object with legacy properties and normalizations. + * Replace `process.argv[0]` with `process.execPath`, preserving the original `argv[0]` value as `process.argv0`. diff --git a/patches/node/feat_optionally_prevent_calling_v8_enablewebassemblytraphandler.patch b/patches/node/feat_optionally_prevent_calling_v8_enablewebassemblytraphandler.patch index 387e83413b67..afb8aa3dd9d1 100644 --- a/patches/node/feat_optionally_prevent_calling_v8_enablewebassemblytraphandler.patch +++ b/patches/node/feat_optionally_prevent_calling_v8_enablewebassemblytraphandler.patch @@ -10,7 +10,7 @@ already been called. This should be upstreamed. diff --git a/src/node.cc b/src/node.cc -index 89e0e5524c2102b86bc5506fe49aa0c6fa0f30c1..e58f28e0f0ff8d61f35ec3c5a69aa37c66c25d78 100644 +index a9336a14304fc673c02ae5b7e5ca82aec9fa6697..7a6a9cdddf00c91612c2bcabf40a5c4af16424df 100644 --- a/src/node.cc +++ b/src/node.cc @@ -605,6 +605,7 @@ static void PlatformInit(ProcessInitializationFlags::Flags flags) { @@ -22,17 +22,17 @@ index 89e0e5524c2102b86bc5506fe49aa0c6fa0f30c1..e58f28e0f0ff8d61f35ec3c5a69aa37c #endif // NODE_USE_V8_WASM_TRAP_HANDLER } diff --git a/src/node.h b/src/node.h -index 9ac0d5addcdd40d5c91d375b626099b95729548a..3ffc51783b0b6dee1c0f0a37d2f52cb1aec2fa3f 100644 +index a512d2228e0afcfff765c3fe845e1f22073047d0..36da93a7b41ea450a5f288ec17b61adae46ae178 100644 --- a/src/node.h +++ b/src/node.h -@@ -272,6 +272,10 @@ enum Flags : uint32_t { - // cppgc::InitializeProcess() before creating a Node.js environment - // and call cppgc::ShutdownProcess() before process shutdown. +@@ -274,6 +274,10 @@ enum Flags : uint32_t { kNoInitializeCppgc = 1 << 13, + // Initialize the process for predictable snapshot generation. + kGeneratePredictableSnapshot = 1 << 14, + // Do not initialize the Web Assembly trap handler. This is used by + // embedders to account for the case where it may already have been + // initialized - calling it more than once will hard crash. -+ kNoEnableWasmTrapHandler = 1 << 14, ++ kNoEnableWasmTrapHandler = 1 << 15, // Emulate the behavior of InitializeNodeWithArgs() when passing // a flags argument to the InitializeOncePerProcess() replacement diff --git a/patches/node/fix_-wshadow_error_in_uvwasi_c.patch b/patches/node/fix_-wshadow_error_in_uvwasi_c.patch new file mode 100644 index 000000000000..4df6805d1b68 --- /dev/null +++ b/patches/node/fix_-wshadow_error_in_uvwasi_c.patch @@ -0,0 +1,30 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Shelley Vohr +Date: Fri, 8 Dec 2023 18:05:28 +0100 +Subject: fix: -Wshadow error in uvwasi.c + +Refs https://github.com/nodejs/node/pull/49908 + +Fixes a -Wshadow error in uvwasi.c. This should be upstreamed. + +diff --git a/deps/uvwasi/src/uvwasi.c b/deps/uvwasi/src/uvwasi.c +index e904b9f9293864db02f660dc3c9737f0e3684355..3e9cce85cae109ffc09f6b86ab5e896620b862d8 100644 +--- a/deps/uvwasi/src/uvwasi.c ++++ b/deps/uvwasi/src/uvwasi.c +@@ -2794,13 +2794,13 @@ uvwasi_errno_t uvwasi_sock_accept(uvwasi_t* uvwasi, + goto close_sock_and_error_exit; + } + +- int r = uv_accept((uv_stream_t*) wrap->sock, (uv_stream_t*) uv_connect_sock); +- if (r == UV_EAGAIN) { ++ int rr = uv_accept((uv_stream_t*) wrap->sock, (uv_stream_t*) uv_connect_sock); ++ if (rr == UV_EAGAIN) { + // still no connection or error so run the loop again + continue; + } + +- if (r != 0) { ++ if (rr != 0) { + // An error occurred accepting the connection. Break out of the loop and + // report an error. + err = uvwasi__translate_uv_error(r); diff --git a/patches/node/fix_add_default_values_for_variables_in_common_gypi.patch b/patches/node/fix_add_default_values_for_variables_in_common_gypi.patch index 73d08d17416a..772f9186c763 100644 --- a/patches/node/fix_add_default_values_for_variables_in_common_gypi.patch +++ b/patches/node/fix_add_default_values_for_variables_in_common_gypi.patch @@ -7,7 +7,7 @@ common.gypi is a file that's included in the node header bundle, despite the fact that we do not build node with gyp. diff --git a/common.gypi b/common.gypi -index d783c7f970237a648f585b9a9e5725494b5d9e2f..0b073571cd482d5124123c4490c564f839429b28 100644 +index 4589f515178093402b4abc265af041037ee22f3b..225b3df380caca809926d6af9fc1001057237752 100644 --- a/common.gypi +++ b/common.gypi @@ -80,6 +80,23 @@ diff --git a/patches/node/fix_assert_module_in_the_renderer_process.patch b/patches/node/fix_assert_module_in_the_renderer_process.patch index 7074b985d29c..50b816eb615f 100644 --- a/patches/node/fix_assert_module_in_the_renderer_process.patch +++ b/patches/node/fix_assert_module_in_the_renderer_process.patch @@ -58,10 +58,10 @@ index c02906eacd90ac27d618e7578d1f928f16a858f7..74b4e15b8230c6380d41e84aa504824b } diff --git a/src/node_options.cc b/src/node_options.cc -index f711ac936e76f9c16d15d7db759d0081a9eb018d..6eb2c137e1dd05b05e781820905cf6778107275d 100644 +index faca807e31daaadb0103556001a16629a3822c1f..9011eda7ce2435c2f859cacbac55cdc6182ebccc 100644 --- a/src/node_options.cc +++ b/src/node_options.cc -@@ -1239,6 +1239,11 @@ void GetEmbedderOptions(const FunctionCallbackInfo& args) { +@@ -1262,6 +1262,11 @@ void GetEmbedderOptions(const FunctionCallbackInfo& args) { Local context = env->context(); Local ret = Object::New(isolate); diff --git a/patches/node/fix_crypto_tests_to_run_with_bssl.patch b/patches/node/fix_crypto_tests_to_run_with_bssl.patch index 68f0ca21fbd7..1ad9f2d8bd6d 100644 --- a/patches/node/fix_crypto_tests_to_run_with_bssl.patch +++ b/patches/node/fix_crypto_tests_to_run_with_bssl.patch @@ -381,7 +381,7 @@ index fcf1922bcdba733af6c22f142db4f7b099947757..9f72ae4e41a113e752f40795103c2af5 assert.throws(() => crypto.createDiffieHellman('abcdef', g), ex); assert.throws(() => crypto.createDiffieHellman('abcdef', 'hex', g), ex); diff --git a/test/parallel/test-crypto-dh.js b/test/parallel/test-crypto-dh.js -index abbe1abe7e53d7bd113afb68b0e9af1e814c70bd..086a8e38021ed1a87be22246cdb4f5ceb56eee4c 100644 +index 3b738b7f47ec59ba718a92e3a0024fed45a9c87c..fabf5775a263804f5974b10cf73c6886d59bf1fa 100644 --- a/test/parallel/test-crypto-dh.js +++ b/test/parallel/test-crypto-dh.js @@ -55,18 +55,17 @@ const crypto = require('crypto'); @@ -411,7 +411,7 @@ index abbe1abe7e53d7bd113afb68b0e9af1e814c70bd..086a8e38021ed1a87be22246cdb4f5ce }; } -@@ -95,10 +94,16 @@ const crypto = require('crypto'); +@@ -99,10 +98,16 @@ const crypto = require('crypto'); // Through a fluke of history, g=0 defaults to DH_GENERATOR (2). { const g = 0; diff --git a/patches/node/fix_do_not_resolve_electron_entrypoints.patch b/patches/node/fix_do_not_resolve_electron_entrypoints.patch index a100a56c34ad..d6533d695401 100644 --- a/patches/node/fix_do_not_resolve_electron_entrypoints.patch +++ b/patches/node/fix_do_not_resolve_electron_entrypoints.patch @@ -5,33 +5,57 @@ Subject: fix: do not resolve electron entrypoints This wastes fs cycles and can result in strange behavior if this path actually exists on disk +diff --git a/lib/internal/modules/esm/load.js b/lib/internal/modules/esm/load.js +index 8406e8ca319533d6186c5d457e951b7a845b6b72..caa34187e17d9a0addcc8c94e46823ea4e05c590 100644 +--- a/lib/internal/modules/esm/load.js ++++ b/lib/internal/modules/esm/load.js +@@ -131,7 +131,7 @@ async function defaultLoad(url, context = kEmptyObject) { + format ??= 'builtin'; + } else { + let contextToPass = context; +- if (source == null) { ++ if (format !== 'electron' && source == null) { + ({ responseURL, source } = await getSource(urlInstance, context)); + contextToPass = { __proto__: context, source }; + } +@@ -139,7 +139,7 @@ async function defaultLoad(url, context = kEmptyObject) { + // Now that we have the source for the module, run `defaultGetFormat` again in case we detect ESM syntax. + format ??= await defaultGetFormat(urlInstance, contextToPass); + +- if ((format === 'commonjs' || format === 'electron') && contextToPass !== context) { ++ if (format === 'electron' || format === 'commonjs' && contextToPass !== context) { + // For backward compatibility reasons, we need to discard the source in + // order for the CJS loader to re-fetch it. + source = null; diff --git a/lib/internal/modules/esm/translators.js b/lib/internal/modules/esm/translators.js -index 4c3a0d8c484a402fe419a0bd45c7e2b1d717cb4a..b8be4cde3bbe4b14e607a2bef0a2405df3cae533 100644 +index dbbe37474c70addfbf8cf805c29732dcd38c74f6..96ffb2b0b051163d8a777ed3d1b5bc2c83fc37c5 100644 --- a/lib/internal/modules/esm/translators.js +++ b/lib/internal/modules/esm/translators.js -@@ -309,6 +309,8 @@ function cjsPreparseModuleExports(filename, source) { - const cached = cjsParseCache.get(module); - if (cached) +@@ -376,6 +376,9 @@ function cjsPreparseModuleExports(filename, source) { + if (cached) { return { module, exportNames: cached.exportNames }; -+ if (filename === 'electron') -+ return { module }; + } ++ if (filename === 'electron') { ++ return { module, exportNames: new SafeSet(['default', ...Object.keys(module.exports)]) }; ++ } } const loaded = Boolean(module); if (!loaded) { diff --git a/lib/internal/modules/run_main.js b/lib/internal/modules/run_main.js -index 0bfe7b11241416bfca0d470047b14777ad99307f..c86add4395ed59cee0d880961e7572b0cc3d6698 100644 +index 1f03c313121db054ff824d07e57c57c749005497..2c8aa6461497f39062ec350ef8a063b9b0ac1edf 100644 --- a/lib/internal/modules/run_main.js +++ b/lib/internal/modules/run_main.js -@@ -2,12 +2,19 @@ +@@ -2,6 +2,7 @@ const { StringPrototypeEndsWith, + StringPrototypeStartsWith, } = primordials; - const { getOptionValue } = require('internal/options'); - const path = require('path'); - + const { containsModuleSyntax } = internalBinding('contextify'); +@@ -13,6 +14,13 @@ const path = require('path'); + * @param {string} main - Entry point path + */ function resolveMainPath(main) { + // For built-in modules used as the main entry point we _never_ + // want to waste cycles resolving them to file paths on disk @@ -39,12 +63,13 @@ index 0bfe7b11241416bfca0d470047b14777ad99307f..c86add4395ed59cee0d880961e7572b0 + if (typeof main === 'string' && StringPrototypeStartsWith(main, 'electron/js2c')) { + return main; + } - // Note extension resolution for the main entry point can be deprecated in a - // future major. - // Module._findPath is monkey-patchable here. -@@ -24,6 +31,12 @@ function resolveMainPath(main) { - } - ++ + const defaultType = getOptionValue('--experimental-default-type'); + /** @type {string} */ + let mainPath; +@@ -50,6 +58,13 @@ function resolveMainPath(main) { + * @param {string} mainPath - Absolute path to the main entry point + */ function shouldUseESMLoader(mainPath) { + // For built-in modules used as the main entry point we _never_ + // want to waste cycles resolving them to file paths on disk @@ -52,6 +77,7 @@ index 0bfe7b11241416bfca0d470047b14777ad99307f..c86add4395ed59cee0d880961e7572b0 + if (typeof mainPath === 'string' && StringPrototypeStartsWith(mainPath, 'electron/js2c')) { + return false; + } ++ + if (getOptionValue('--experimental-default-type') === 'module') { return true; } + /** - * @type {string[]} userLoaders A list of custom loaders registered by the user - * (or an empty list when none have been registered). diff --git a/patches/node/fix_expose_the_built-in_electron_module_via_the_esm_loader.patch b/patches/node/fix_expose_the_built-in_electron_module_via_the_esm_loader.patch index 75d416e21348..040a336c73e6 100644 --- a/patches/node/fix_expose_the_built-in_electron_module_via_the_esm_loader.patch +++ b/patches/node/fix_expose_the_built-in_electron_module_via_the_esm_loader.patch @@ -6,10 +6,10 @@ Subject: fix: expose the built-in electron module via the ESM loader This allows usage of `import { app } from 'electron'` and `import('electron')` natively in the browser + non-sandboxed renderer diff --git a/lib/internal/modules/esm/get_format.js b/lib/internal/modules/esm/get_format.js -index 4ac9c011d153f4cb39cb7d4f46de0f8e65f70a56..f8462b69368aa7987e1e8ac8cd73e4ff2d921c51 100644 +index 1931688e85d05ee2da4f88efb05d635cb43be233..afccc24392abff9eef2b9953fcffeb79ee71ad15 100644 --- a/lib/internal/modules/esm/get_format.js +++ b/lib/internal/modules/esm/get_format.js -@@ -27,6 +27,7 @@ const protocolHandlers = { +@@ -30,6 +30,7 @@ const protocolHandlers = { 'http:': getHttpProtocolModuleFormat, 'https:': getHttpProtocolModuleFormat, 'node:'() { return 'builtin'; }, @@ -18,20 +18,19 @@ index 4ac9c011d153f4cb39cb7d4f46de0f8e65f70a56..f8462b69368aa7987e1e8ac8cd73e4ff /** diff --git a/lib/internal/modules/esm/load.js b/lib/internal/modules/esm/load.js -index d064296d11c463616111d28a32b7ad3f6a72bebd..14d5236d0ead946acf9a2f63bf979e7193bfbf56 100644 +index 6f9b73abd8a76191714f12d68c01a881653d8d4a..f108b567a910805ff86f0baf75fa1a6102ad28d6 100644 --- a/lib/internal/modules/esm/load.js +++ b/lib/internal/modules/esm/load.js -@@ -123,7 +123,8 @@ async function defaultLoad(url, context = kEmptyObject) { +@@ -140,7 +140,7 @@ async function defaultLoad(url, context = kEmptyObject) { + // Now that we have the source for the module, run `defaultGetFormat` again in case we detect ESM syntax. + format ??= await defaultGetFormat(urlInstance, contextToPass); - if ( - format === 'builtin' || -- format === 'commonjs' -+ format === 'commonjs' || -+ format === 'electron' - ) { - source = null; - } else if (source == null) { -@@ -201,6 +202,7 @@ function throwIfUnsupportedURLScheme(parsed, experimentalNetworkImports) { +- if (format === 'commonjs' && contextToPass !== context) { ++ if ((format === 'commonjs' || format === 'electron') && contextToPass !== context) { + // For backward compatibility reasons, we need to discard the source in + // order for the CJS loader to re-fetch it. + source = null; +@@ -221,6 +221,7 @@ function throwIfUnsupportedURLScheme(parsed, experimentalNetworkImports) { protocol !== 'file:' && protocol !== 'data:' && protocol !== 'node:' && @@ -39,7 +38,7 @@ index d064296d11c463616111d28a32b7ad3f6a72bebd..14d5236d0ead946acf9a2f63bf979e71 ( !experimentalNetworkImports || ( -@@ -209,7 +211,7 @@ function throwIfUnsupportedURLScheme(parsed, experimentalNetworkImports) { +@@ -229,7 +230,7 @@ function throwIfUnsupportedURLScheme(parsed, experimentalNetworkImports) { ) ) ) { @@ -49,19 +48,19 @@ index d064296d11c463616111d28a32b7ad3f6a72bebd..14d5236d0ead946acf9a2f63bf979e71 ArrayPrototypePush(schemes, 'https', 'http'); } diff --git a/lib/internal/modules/esm/resolve.js b/lib/internal/modules/esm/resolve.js -index acb5ddca8af3d2495ce27d6426b28e6ff73a8f33..acfcc1f1f92548117ded857fa8d4dd140e07ab2b 100644 +index 58e7df07ca5275e3a684f30c3d0a3f901d000fb8..2d077cc182b40e0bdce2d71d0471e96e6d30222a 100644 --- a/lib/internal/modules/esm/resolve.js +++ b/lib/internal/modules/esm/resolve.js -@@ -725,6 +725,8 @@ function parsePackageName(specifier, base) { - return { packageName, packageSubpath, isScoped }; +@@ -731,6 +731,8 @@ function packageImportsResolve(name, base, conditions) { + throw importNotDefined(name, packageJSONUrl, base); } +const electronTypes = ['electron', 'electron/main', 'electron/common', 'electron/renderer']; + /** - * @param {string} specifier - * @param {string | URL | undefined} base -@@ -736,6 +738,11 @@ function packageResolve(specifier, base, conditions) { + * Returns the package type for a given URL. + * @param {URL} url - The URL to get the package type for. +@@ -791,6 +793,11 @@ function packageResolve(specifier, base, conditions) { return new URL('node:' + specifier); } @@ -74,10 +73,10 @@ index acb5ddca8af3d2495ce27d6426b28e6ff73a8f33..acfcc1f1f92548117ded857fa8d4dd14 parsePackageName(specifier, base); diff --git a/lib/internal/modules/esm/translators.js b/lib/internal/modules/esm/translators.js -index b143cd0ad34d0e039db3e7493be00d923cc68b2d..178f362b2869173d51b2e97a8d35a16ab4ed4962 100644 +index 7a62615cfe4210c9fd83c6bfa3b5da19eec5fff2..bda102b266b17936efc453d039213517c4ef921c 100644 --- a/lib/internal/modules/esm/translators.js +++ b/lib/internal/modules/esm/translators.js -@@ -220,7 +220,7 @@ function createCJSModuleWrap(url, source, isMain, loadCJS = loadCJSModule) { +@@ -280,7 +280,7 @@ function createCJSModuleWrap(url, source, isMain, loadCJS = loadCJSModule) { const { exportNames, module } = cjsPreparseModuleExports(filename, source); cjsCache.set(url, module); @@ -86,20 +85,18 @@ index b143cd0ad34d0e039db3e7493be00d923cc68b2d..178f362b2869173d51b2e97a8d35a16a [...exportNames] : ['default', ...exportNames]; if (isMain) { -@@ -241,9 +241,9 @@ function createCJSModuleWrap(url, source, isMain, loadCJS = loadCJSModule) { - } else { +@@ -302,8 +302,8 @@ function createCJSModuleWrap(url, source, isMain, loadCJS = loadCJSModule) { ({ exports } = module); } -- for (const exportName of exportNames) { + for (const exportName of exportNames) { - if (!ObjectPrototypeHasOwnProperty(exports, exportName) || -- exportName === 'default') -+ for (const exportName of namesWithDefault) { +- exportName === 'default') { + if (exportName === 'default' || -+ !ObjectPrototypeHasOwnProperty(exports, exportName)) ++ !ObjectPrototypeHasOwnProperty(exports, exportName)) { continue; + } // We might trigger a getter -> dont fail. - let value; -@@ -267,6 +267,10 @@ translators.set('require-commonjs', (url, source, isMain) => { +@@ -328,6 +328,10 @@ translators.set('require-commonjs', (url, source, isMain) => { return createCJSModuleWrap(url, source); }); @@ -111,7 +108,7 @@ index b143cd0ad34d0e039db3e7493be00d923cc68b2d..178f362b2869173d51b2e97a8d35a16a // or as the initial entry point when the ESM loader handles a CommonJS entry. translators.set('commonjs', async function commonjsStrategy(url, source, diff --git a/lib/internal/url.js b/lib/internal/url.js -index 8d5926e8fcb9df031e37698588075a34a80aea6c..6df0b68c8d35445d5f02475678484a6d5157762e 100644 +index a58f96aee7cc424ce18fe647afff8724f8a179a0..ae618cdeac1dfa1fd0ddcceb9edc83e06c59fc4b 100644 --- a/lib/internal/url.js +++ b/lib/internal/url.js @@ -1389,6 +1389,8 @@ function fileURLToPath(path) { diff --git a/patches/node/fix_expose_tracing_agent_and_use_tracing_tracingcontroller_instead.patch b/patches/node/fix_expose_tracing_agent_and_use_tracing_tracingcontroller_instead.patch index dfe562f610f2..a238169e6c5f 100644 --- a/patches/node/fix_expose_tracing_agent_and_use_tracing_tracingcontroller_instead.patch +++ b/patches/node/fix_expose_tracing_agent_and_use_tracing_tracingcontroller_instead.patch @@ -22,7 +22,7 @@ index 6a6164b6d294430b6f2fe826cdcef5a9cc3f9660..035f495687856b0cfbcc4e87ba6e90d5 int thread_pool_size, node::tracing::TracingController* tracing_controller) { diff --git a/src/node.h b/src/node.h -index ca01c42e8af484def476ba27cb270a0cc90226c9..dcce529664e1d126115545d6ba7f5b8492b0e921 100644 +index f2740116a4710be31d8c8d3a03f9ea3925301b31..74a097279d3e5dc3ee6c5e609fd35cf44e5002f5 100644 --- a/src/node.h +++ b/src/node.h @@ -132,6 +132,7 @@ struct SnapshotData; @@ -33,7 +33,7 @@ index ca01c42e8af484def476ba27cb270a0cc90226c9..dcce529664e1d126115545d6ba7f5b84 class TracingController; } -@@ -772,6 +773,8 @@ NODE_EXTERN void GetNodeReport(Environment* env, +@@ -774,6 +775,8 @@ NODE_EXTERN void GetNodeReport(Environment* env, NODE_EXTERN MultiIsolatePlatform* GetMultiIsolatePlatform(Environment* env); NODE_EXTERN MultiIsolatePlatform* GetMultiIsolatePlatform(IsolateData* env); diff --git a/patches/node/fix_ftbfs_werror_wextra-semi.patch b/patches/node/fix_ftbfs_werror_wextra-semi.patch deleted file mode 100644 index cb8a07961867..000000000000 --- a/patches/node/fix_ftbfs_werror_wextra-semi.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Charles Kerr -Date: Wed, 19 Jul 2023 16:00:08 -0500 -Subject: fix ftbfs Werror Wextra-semi - -Fix a deps warning that causes FTBFS when building with -Werror. - -This patch can be removed if fixed upstream. -Upstream PR: https://github.com/nodejs/uvwasi/pull/217 - -diff --git a/deps/uvwasi/src/uvwasi.c b/deps/uvwasi/src/uvwasi.c -index 9e7fc7681664b8430bbd2d2324352be8c6735106..708a52b0621666133b5215790cb9d5fd6a71d4fa 100644 ---- a/deps/uvwasi/src/uvwasi.c -+++ b/deps/uvwasi/src/uvwasi.c -@@ -2564,7 +2564,7 @@ uvwasi_errno_t uvwasi_sock_accept(uvwasi_t* uvwasi, - /* TODO(mhdawson): Needs implementation */ - UVWASI_DEBUG("uvwasi_sock_accept(uvwasi=%p, unimplemented)\n", uvwasi); - return UVWASI_ENOTSUP; --}; -+} - - - const char* uvwasi_embedder_err_code_to_string(uvwasi_errno_t code) { -@@ -2651,4 +2651,4 @@ const char* uvwasi_embedder_err_code_to_string(uvwasi_errno_t code) { - default: - return "UVWASI_UNKNOWN_ERROR"; - } --} -+} -\ No newline at end of file diff --git a/patches/node/fix_handle_boringssl_and_openssl_incompatibilities.patch b/patches/node/fix_handle_boringssl_and_openssl_incompatibilities.patch index 80cdf96192e5..f33662a45278 100644 --- a/patches/node/fix_handle_boringssl_and_openssl_incompatibilities.patch +++ b/patches/node/fix_handle_boringssl_and_openssl_incompatibilities.patch @@ -104,7 +104,7 @@ index c6120a655ec853aef11c66ed37d7ca0ffb957dd3..a52ca15cb0ab592d4196d4bd0f113324 if (!Set(env->context(), obj, diff --git a/src/crypto/crypto_context.cc b/src/crypto/crypto_context.cc -index 3876adf7d72211d8d8c5a94564168094ecfc660b..ccd166d9439a821328d2ad35352488960206f65e 100644 +index 6e5bbe07d0c337b36f3157c2e6404fdc91849fd1..7ec682833213de9054a8c30751436d12baaea235 100644 --- a/src/crypto/crypto_context.cc +++ b/src/crypto/crypto_context.cc @@ -63,7 +63,7 @@ inline X509_STORE* GetOrCreateRootCertStore() { @@ -240,6 +240,28 @@ index 3fa4a415dc911a13afd90dfb31c1ed4ad0fd268f..fa48dffc31342c44a1c1207b9d4c3dc7 if (EVP_PKEY_paramgen(param_ctx.get(), &raw_params) <= 0) return EVPKeyCtxPointer(); +diff --git a/src/crypto/crypto_keys.cc b/src/crypto/crypto_keys.cc +index c5dd2fb8fce40f2bf6f9a8543047ffb50cc08084..d850af9257cc194ee385130ce3cd2c0101b2455f 100644 +--- a/src/crypto/crypto_keys.cc ++++ b/src/crypto/crypto_keys.cc +@@ -1241,6 +1241,7 @@ void KeyObjectHandle::GetAsymmetricKeyType( + } + + bool KeyObjectHandle::CheckEcKeyData() const { ++#ifndef OPENSSL_IS_BORINGSSL + MarkPopErrorOnReturn mark_pop_error_on_return; + + const ManagedEVPPKey& key = data_->GetAsymmetricKey(); +@@ -1259,6 +1260,9 @@ bool KeyObjectHandle::CheckEcKeyData() const { + #else + return EVP_PKEY_public_check(ctx.get()) == 1; + #endif ++#else ++ return true; ++#endif + } + + void KeyObjectHandle::CheckEcKeyData(const FunctionCallbackInfo& args) { diff --git a/src/crypto/crypto_random.cc b/src/crypto/crypto_random.cc index 245f352918696413f8f0f7cec94dbcec687685af..35c1c1ce9f0e3d59b75e3966d485bf70b846de5b 100644 --- a/src/crypto/crypto_random.cc @@ -254,10 +276,10 @@ index 245f352918696413f8f0f7cec94dbcec687685af..35c1c1ce9f0e3d59b75e3966d485bf70 THROW_ERR_CRYPTO_OPERATION_FAILED(env, "could not generate prime"); return Nothing(); diff --git a/src/crypto/crypto_rsa.cc b/src/crypto/crypto_rsa.cc -index 3f8499457cf10765fa55e5018a26580f2c5ef15d..31647423be528949db744cbea43586ece5243bac 100644 +index f222ab9cf5ccbc5dd3399b18d7688efda6672c93..349abd4d06e7f624a071b994271dedc31dc9229a 100644 --- a/src/crypto/crypto_rsa.cc +++ b/src/crypto/crypto_rsa.cc -@@ -610,10 +610,11 @@ Maybe GetRsaKeyDetail( +@@ -616,10 +616,11 @@ Maybe GetRsaKeyDetail( } if (params->saltLength != nullptr) { @@ -361,7 +383,7 @@ index cf051585e779e2b03bd7b95fe5008b89cc7f8162..9de49c6828468fdf846dcd4ad445390f #if NODE_OPENSSL_HAS_QUIC #include diff --git a/src/node_options.cc b/src/node_options.cc -index b544f1209143c0d4a01b1df3257e5b2ba1d5bfee..f711ac936e76f9c16d15d7db759d0081a9eb018d 100644 +index 29cb7fc6b29b89946856990032645ad4edb8529c..faca807e31daaadb0103556001a16629a3822c1f 100644 --- a/src/node_options.cc +++ b/src/node_options.cc @@ -6,7 +6,7 @@ @@ -374,7 +396,7 @@ index b544f1209143c0d4a01b1df3257e5b2ba1d5bfee..f711ac936e76f9c16d15d7db759d0081 #endif diff --git a/src/node_options.h b/src/node_options.h -index bc18a45e681a3cd8d26ea94862d7a6eb3a6631fc..08141c540c0c3fe4f2a4fe66bf75557a71a1d8e6 100644 +index 30955c779714ce5ad9b79f11e4cfefbcada7fa05..f02c07cd418fa2e3c64221bd37acd380a130f608 100644 --- a/src/node_options.h +++ b/src/node_options.h @@ -11,7 +11,7 @@ diff --git a/patches/node/fix_handle_possible_disabled_sharedarraybuffer.patch b/patches/node/fix_handle_possible_disabled_sharedarraybuffer.patch deleted file mode 100644 index 26a780bee99e..000000000000 --- a/patches/node/fix_handle_possible_disabled_sharedarraybuffer.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Shelley Vohr -Date: Mon, 2 Oct 2023 16:03:43 +0200 -Subject: fix: handle possible disabled SharedArrayBuffer - -It's possible for SharedArrayBuffer to be disabled with the -no-harmony-sharedarraybuffer -flag, and so we should guard uses with a check for potential undefined-ness. - -This should be upstreamed to Node.js. - -diff --git a/lib/internal/crypto/webidl.js b/lib/internal/crypto/webidl.js -index 9f5340c223902c5ff61def05e8a4f470b4f328e8..d6dbfa482f9ebff3f99fb810e072cf9a03d1cd4d 100644 ---- a/lib/internal/crypto/webidl.js -+++ b/lib/internal/crypto/webidl.js -@@ -183,7 +183,10 @@ function isNonSharedArrayBuffer(V) { - return ObjectPrototypeIsPrototypeOf(ArrayBufferPrototype, V); - } - -+// SharedArrayBuffers can be disabled with --no-harmony-sharedarraybuffer. - function isSharedArrayBuffer(V) { -+ if (SharedArrayBuffer === undefined) -+ return false; - return ObjectPrototypeIsPrototypeOf(SharedArrayBuffer.prototype, V); - } - -diff --git a/lib/internal/main/worker_thread.js b/lib/internal/main/worker_thread.js -index 4460042d7bfbb8286a9b2abcbfb9e44f21b5d944..027a2de1878d5f09dc5d44b1b21af7163ea1b999 100644 ---- a/lib/internal/main/worker_thread.js -+++ b/lib/internal/main/worker_thread.js -@@ -112,6 +112,7 @@ port.on('message', (message) => { - - require('internal/worker').assignEnvironmentData(environmentData); - -+ // SharedArrayBuffers can be disabled with --no-harmony-sharedarraybuffer. - if (SharedArrayBuffer !== undefined) { - // The counter is only passed to the workers created by the main thread, - // not to workers created by other workers. diff --git a/patches/node/fix_lazyload_fs_in_esm_loaders_to_apply_asar_patches.patch b/patches/node/fix_lazyload_fs_in_esm_loaders_to_apply_asar_patches.patch index d02b0bd7aca6..9eb7ef441488 100644 --- a/patches/node/fix_lazyload_fs_in_esm_loaders_to_apply_asar_patches.patch +++ b/patches/node/fix_lazyload_fs_in_esm_loaders_to_apply_asar_patches.patch @@ -6,12 +6,12 @@ Subject: fix: lazyload fs in esm loaders to apply asar patches Changes { foo } from fs to just "fs.foo" so that our patching of fs is applied to esm loaders diff --git a/lib/internal/modules/esm/load.js b/lib/internal/modules/esm/load.js -index 14d5236d0ead946acf9a2f63bf979e7193bfbf56..74136abfb9aae1fc8ab746908be752056b6d7c5a 100644 +index f108b567a910805ff86f0baf75fa1a6102ad28d6..8406e8ca319533d6186c5d457e951b7a845b6b72 100644 --- a/lib/internal/modules/esm/load.js +++ b/lib/internal/modules/esm/load.js @@ -10,7 +10,7 @@ const { kEmptyObject } = require('internal/util'); const { defaultGetFormat } = require('internal/modules/esm/get_format'); - const { validateAssertions } = require('internal/modules/esm/assert'); + const { validateAttributes, emitImportAssertionWarning } = require('internal/modules/esm/assert'); const { getOptionValue } = require('internal/options'); -const { readFileSync } = require('fs'); +const fs = require('fs'); @@ -38,7 +38,7 @@ index 14d5236d0ead946acf9a2f63bf979e7193bfbf56..74136abfb9aae1fc8ab746908be75205 const match = RegExpPrototypeExec(DATA_URL_PATTERN, url.pathname); if (!match) { diff --git a/lib/internal/modules/esm/resolve.js b/lib/internal/modules/esm/resolve.js -index acfcc1f1f92548117ded857fa8d4dd140e07ab2b..ce8092b96aee8d09ff382110db4be62dcd760cce 100644 +index 2d077cc182b40e0bdce2d71d0471e96e6d30222a..34fd6613fa24d628fc026ac11e5be7217a20fff4 100644 --- a/lib/internal/modules/esm/resolve.js +++ b/lib/internal/modules/esm/resolve.js @@ -24,7 +24,7 @@ const { @@ -50,7 +50,7 @@ index acfcc1f1f92548117ded857fa8d4dd140e07ab2b..ce8092b96aee8d09ff382110db4be62d const { getOptionValue } = require('internal/options'); // Do not eagerly grab .manifest, it may be in TDZ const policy = getOptionValue('--experimental-policy') ? -@@ -235,7 +235,7 @@ function finalizeResolution(resolved, base, preserveSymlinks) { +@@ -257,7 +257,7 @@ function finalizeResolution(resolved, base, preserveSymlinks) { } if (!preserveSymlinks) { @@ -60,28 +60,19 @@ index acfcc1f1f92548117ded857fa8d4dd140e07ab2b..ce8092b96aee8d09ff382110db4be62d }); const { search, hash } = resolved; diff --git a/lib/internal/modules/esm/translators.js b/lib/internal/modules/esm/translators.js -index 178f362b2869173d51b2e97a8d35a16ab4ed4962..4c3a0d8c484a402fe419a0bd45c7e2b1d717cb4a 100644 +index bda102b266b17936efc453d039213517c4ef921c..dbbe37474c70addfbf8cf805c29732dcd38c74f6 100644 --- a/lib/internal/modules/esm/translators.js +++ b/lib/internal/modules/esm/translators.js -@@ -25,7 +25,7 @@ function lazyTypes() { - } +@@ -32,7 +32,7 @@ function lazyTypes() { + const { containsModuleSyntax } = internalBinding('contextify'); const assert = require('internal/assert'); -const { readFileSync } = require('fs'); +const fs = require('fs'); const { dirname, extname, isAbsolute } = require('path'); const { - hasEsmSyntax, -@@ -132,7 +132,7 @@ translators.set('module', async function moduleStrategy(url, source, isMain) { - */ - function enrichCJSError(err, content, filename) { - if (err != null && ObjectGetPrototypeOf(err) === SyntaxErrorPrototype && -- hasEsmSyntax(content || readFileSync(filename, 'utf-8'))) { -+ hasEsmSyntax(content || fs.readFileSync(filename, 'utf-8'))) { - // Emit the warning synchronously because we are in the middle of handling - // a SyntaxError that will throw and likely terminate the process before an - // asynchronous warning would be emitted. -@@ -294,7 +294,7 @@ translators.set('commonjs', async function commonjsStrategy(url, source, + loadBuiltinModule, +@@ -355,7 +355,7 @@ translators.set('commonjs', async function commonjsStrategy(url, source, try { // We still need to read the FS to detect the exports. @@ -90,12 +81,12 @@ index 178f362b2869173d51b2e97a8d35a16ab4ed4962..4c3a0d8c484a402fe419a0bd45c7e2b1 } catch { // Continue regardless of error. } -@@ -357,7 +357,7 @@ function cjsPreparseModuleExports(filename, source) { +@@ -424,7 +424,7 @@ function cjsPreparseModuleExports(filename, source) { isAbsolute(resolved)) { // TODO: this should be calling the `load` hook chain to get the source // (and fallback to reading the FS only if the source is nullish). - const source = readFileSync(resolved, 'utf-8'); + const source = fs.readFileSync(resolved, 'utf-8'); const { exportNames: reexportNames } = cjsPreparseModuleExports(resolved, source); - for (const name of reexportNames) + for (const name of reexportNames) { exportNames.add(name); diff --git a/patches/node/fix_missing_include_for_node_extern.patch b/patches/node/fix_missing_include_for_node_extern.patch index 4fea6037ef2a..43e7d2628da9 100644 --- a/patches/node/fix_missing_include_for_node_extern.patch +++ b/patches/node/fix_missing_include_for_node_extern.patch @@ -13,7 +13,7 @@ causing the following error: This should be upstreamed. diff --git a/src/module_wrap.h b/src/module_wrap.h -index c51eb99ce3eb54bc30ae922e0357b637b09d53c6..55317ced78ee9ceaa13f7e00477c59370eb335fa 100644 +index 23a0d7aee1dfa0ebe26e0507e31eacb0b4d137ed..0733017d8e1ac6e60589082b402bd44a98ddc312 100644 --- a/src/module_wrap.h +++ b/src/module_wrap.h @@ -7,6 +7,7 @@ diff --git a/patches/node/fix_wunreachable-code_warning_in_ares_init_rand_engine.patch b/patches/node/fix_wunreachable-code_warning_in_ares_init_rand_engine.patch deleted file mode 100644 index c12a8fbf0755..000000000000 --- a/patches/node/fix_wunreachable-code_warning_in_ares_init_rand_engine.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Charles Kerr -Date: Thu, 22 Jun 2023 11:59:47 -0500 -Subject: fix: Wunreachable-code warning in ares__init_rand_engine() - -Fix upstream Win32 FTBFS when building with -Werror,-Wunreachable-code. - -This patch can be removed after the fix is picked up in Node.js. -Upstream PR @ https://github.com/c-ares/c-ares/pull/531 - -diff --git a/deps/cares/src/lib/ares_rand.c b/deps/cares/src/lib/ares_rand.c -index 766c1e6ea9bda1784cfb611dbac66424806cd23a..12d943921e3ba61cbf7a2ed3194fcd5a6c61da8a 100644 ---- a/deps/cares/src/lib/ares_rand.c -+++ b/deps/cares/src/lib/ares_rand.c -@@ -55,6 +55,7 @@ BOOLEAN WINAPI SystemFunction036(PVOID RandomBuffer, ULONG RandomBufferLength); - # endif - #endif - -+#if !defined(HAVE_ARC4RANDOM_BUF) && !defined(_WIN32) - - #define ARES_RC4_KEY_LEN 32 /* 256 bits */ - -@@ -129,6 +130,7 @@ static void ares_rc4_init(ares_rand_rc4 *rc4_state) - rc4_state->i = 0; - rc4_state->j = 0; - } -+#endif - - /* Just outputs the key schedule, no need to XOR with any data since we have none */ - static void ares_rc4_prng(ares_rand_rc4 *rc4_state, unsigned char *buf, size_t len) -@@ -166,13 +168,13 @@ static int ares__init_rand_engine(ares_rand_state *state) - return 1; - } - /* Fall-Thru on failure to RC4 */ --#endif - - state->type = ARES_RAND_RC4; - ares_rc4_init(&state->state.rc4); - - /* Currently cannot fail */ - return 1; -+#endif - } - - -@@ -276,4 +278,3 @@ unsigned short ares__generate_new_id(ares_rand_state *state) - ares__rand_bytes(state, (unsigned char *)&r, sizeof(r)); - return r; - } -- diff --git a/patches/node/lib_test_do_not_hardcode_buffer_kmaxlength.patch b/patches/node/lib_test_do_not_hardcode_buffer_kmaxlength.patch deleted file mode 100644 index 4ec352ead612..000000000000 --- a/patches/node/lib_test_do_not_hardcode_buffer_kmaxlength.patch +++ /dev/null @@ -1,155 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= -Date: Thu, 28 Sep 2023 14:50:20 +0200 -Subject: lib,test: do not hardcode Buffer.kMaxLength - -V8 will soon support typed arrays as large as the maximum array buffer -length. This patch replaces hardcoded values related to -Buffer.kMaxLength with the actual constant. -It also fixes a test that was passing by accident. - -Refs: https://github.com/v8/v8/commit/44b299590083b888637c79fb5632806e607ab861 -PR-URL: https://github.com/nodejs/node/pull/49876 -Reviewed-By: Richard Lau -Reviewed-By: Luigi Pinca -Reviewed-By: Yagiz Nizipli -(cherry picked from commit a4fdb1abe0844d86b4cbfcc4051794656e7d746e) - -diff --git a/lib/internal/blob.js b/lib/internal/blob.js -index d0e47c1a4397a875c937d43c3b72dbd1e1de35a7..400d2c5fd21bc962a8befc4d80527216baddd6d5 100644 ---- a/lib/internal/blob.js -+++ b/lib/internal/blob.js -@@ -24,6 +24,9 @@ const { - concat, - getDataObject, - } = internalBinding('blob'); -+const { -+ kMaxLength, -+} = internalBinding('buffer'); - - const { - TextDecoder, -@@ -62,7 +65,6 @@ const { - } = require('internal/errors'); - - const { -- isUint32, - validateDictionary, - } = require('internal/validators'); - -@@ -158,8 +160,8 @@ class Blob { - return src; - }); - -- if (!isUint32(length)) -- throw new ERR_BUFFER_TOO_LARGE(0xFFFFFFFF); -+ if (length > kMaxLength) -+ throw new ERR_BUFFER_TOO_LARGE(kMaxLength); - - this[kHandle] = _createBlob(sources_, length); - this[kLength] = length; -diff --git a/test/parallel/test-blob-buffer-too-large.js b/test/parallel/test-blob-buffer-too-large.js -index 2fd8b8754bd593a0da069044d33fcd6bba82f9c9..a9cf53b025bbff58a8d5783e4f807d79f5d68e2b 100644 ---- a/test/parallel/test-blob-buffer-too-large.js -+++ b/test/parallel/test-blob-buffer-too-large.js -@@ -3,17 +3,17 @@ - - const common = require('../common'); - const assert = require('assert'); --const { Blob } = require('buffer'); -+const { Blob, kMaxLength } = require('buffer'); - - if (common.isFreeBSD) - common.skip('Oversized buffer make the FreeBSD CI runner crash'); - - try { -- new Blob([new Uint8Array(0xffffffff), [1]]); -+ new Blob([new Uint8Array(kMaxLength), [1]]); - } catch (e) { - if ( - e.message === 'Array buffer allocation failed' || -- e.message === 'Invalid typed array length: 4294967295' -+ e.message === `Invalid typed array length: ${kMaxLength}` - ) { - common.skip( - 'Insufficient memory on this platform for oversized buffer test.' -diff --git a/test/parallel/test-buffer-alloc.js b/test/parallel/test-buffer-alloc.js -index c6b728027057ece38c2b7fcc6bf7b18b959125d2..aad9c6bcab69e971c02281928885d94aa21c8199 100644 ---- a/test/parallel/test-buffer-alloc.js -+++ b/test/parallel/test-buffer-alloc.js -@@ -4,13 +4,16 @@ const common = require('../common'); - const assert = require('assert'); - const vm = require('vm'); - --const SlowBuffer = require('buffer').SlowBuffer; -+const { -+ SlowBuffer, -+ kMaxLength, -+} = require('buffer'); - - // Verify the maximum Uint8Array size. There is no concrete limit by spec. The - // internal limits should be updated if this fails. - assert.throws( -- () => new Uint8Array(2 ** 32 + 1), -- { message: 'Invalid typed array length: 4294967297' } -+ () => new Uint8Array(kMaxLength + 1), -+ { message: `Invalid typed array length: ${kMaxLength + 1}` }, - ); - - const b = Buffer.allocUnsafe(1024); -diff --git a/test/parallel/test-buffer-over-max-length.js b/test/parallel/test-buffer-over-max-length.js -index d2df358cc00ca4b238252d6d11bdad3b77fad114..f29d6b62d4aa408fb3a67ffe71b14436fbbff907 100644 ---- a/test/parallel/test-buffer-over-max-length.js -+++ b/test/parallel/test-buffer-over-max-length.js -@@ -12,18 +12,8 @@ const bufferMaxSizeMsg = { - name: 'RangeError', - }; - --assert.throws(() => Buffer((-1 >>> 0) + 2), bufferMaxSizeMsg); --assert.throws(() => SlowBuffer((-1 >>> 0) + 2), bufferMaxSizeMsg); --assert.throws(() => Buffer.alloc((-1 >>> 0) + 2), bufferMaxSizeMsg); --assert.throws(() => Buffer.allocUnsafe((-1 >>> 0) + 2), bufferMaxSizeMsg); --assert.throws(() => Buffer.allocUnsafeSlow((-1 >>> 0) + 2), bufferMaxSizeMsg); -- - assert.throws(() => Buffer(kMaxLength + 1), bufferMaxSizeMsg); - assert.throws(() => SlowBuffer(kMaxLength + 1), bufferMaxSizeMsg); - assert.throws(() => Buffer.alloc(kMaxLength + 1), bufferMaxSizeMsg); - assert.throws(() => Buffer.allocUnsafe(kMaxLength + 1), bufferMaxSizeMsg); - assert.throws(() => Buffer.allocUnsafeSlow(kMaxLength + 1), bufferMaxSizeMsg); -- --// issue GH-4331 --assert.throws(() => Buffer.allocUnsafe(0x100000001), bufferMaxSizeMsg); --assert.throws(() => Buffer.allocUnsafe(0xFFFFFFFFF), bufferMaxSizeMsg); -diff --git a/test/parallel/test-buffer-tostring-rangeerror.js b/test/parallel/test-buffer-tostring-rangeerror.js -index d2e1e0d6e46438f20d6b8f1196ebd936d4fa3436..0ebea759b5c42be0c294093256ea3cad7034a98b 100644 ---- a/test/parallel/test-buffer-tostring-rangeerror.js -+++ b/test/parallel/test-buffer-tostring-rangeerror.js -@@ -1,17 +1,22 @@ - 'use strict'; - require('../common'); - --// This test ensures that Node.js throws a RangeError when trying to convert a --// gigantic buffer into a string. -+// This test ensures that Node.js throws an Error when trying to convert a -+// large buffer into a string. - // Regression test for https://github.com/nodejs/node/issues/649. - - const assert = require('assert'); --const SlowBuffer = require('buffer').SlowBuffer; -+const { -+ SlowBuffer, -+ constants: { -+ MAX_STRING_LENGTH, -+ }, -+} = require('buffer'); - --const len = 1422561062959; -+const len = MAX_STRING_LENGTH + 1; - const message = { -- code: 'ERR_OUT_OF_RANGE', -- name: 'RangeError', -+ code: 'ERR_STRING_TOO_LONG', -+ name: 'Error', - }; - assert.throws(() => Buffer(len).toString('utf8'), message); - assert.throws(() => SlowBuffer(len).toString('utf8'), message); diff --git a/patches/node/pass_all_globals_through_require.patch b/patches/node/pass_all_globals_through_require.patch index 79bdf3816094..73d34245dd2f 100644 --- a/patches/node/pass_all_globals_through_require.patch +++ b/patches/node/pass_all_globals_through_require.patch @@ -6,10 +6,10 @@ Subject: Pass all globals through "require" (cherry picked from commit 7d015419cb7a0ecfe6728431a4ed2056cd411d62) diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js -index 19a7d7e671f5abfa55b62290dcf3796a2c4e9013..3161afa33889f1682a1689e76fbcadc397f4b01c 100644 +index b077ee386bb40ea32208fc6655de88a3449b7eb2..f408d6c152d6acabea5ff3e262fe344909046595 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js -@@ -142,6 +142,13 @@ const { +@@ -146,6 +146,13 @@ const { CHAR_FORWARD_SLASH, } = require('internal/constants'); @@ -23,8 +23,8 @@ index 19a7d7e671f5abfa55b62290dcf3796a2c4e9013..3161afa33889f1682a1689e76fbcadc3 const { isProxy, } = require('internal/util/types'); -@@ -1236,10 +1243,12 @@ Module.prototype._compile = function(content, filename) { - if (requireDepth === 0) statCache = new SafeMap(); +@@ -1371,10 +1378,12 @@ Module.prototype._compile = function(content, filename) { + if (requireDepth === 0) { statCache = new SafeMap(); } if (inspectorWrapper) { result = inspectorWrapper(compiledWrapper, thisValue, exports, - require, module, filename, dirname); @@ -37,4 +37,4 @@ index 19a7d7e671f5abfa55b62290dcf3796a2c4e9013..3161afa33889f1682a1689e76fbcadc3 + dirname, process, localGlobal, localBuffer]); } hasLoadedAnyUserCJSModule = true; - if (requireDepth === 0) statCache = null; + if (requireDepth === 0) { statCache = null; } diff --git a/patches/node/refactor_allow_embedder_overriding_of_internal_fs_calls.patch b/patches/node/refactor_allow_embedder_overriding_of_internal_fs_calls.patch index cef6ccad7d77..5bb8f03fc8e9 100644 --- a/patches/node/refactor_allow_embedder_overriding_of_internal_fs_calls.patch +++ b/patches/node/refactor_allow_embedder_overriding_of_internal_fs_calls.patch @@ -22,21 +22,20 @@ index 7a773d5208e250abd8b0efb6dde66c45060bbee4..45e38ca0a122e3b1c5d8d59865f9610c const binding = internalBinding('builtins'); diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js -index 3161afa33889f1682a1689e76fbcadc397f4b01c..84fea979d482d3d5cacfad4b09237e6345675cad 100644 +index f408d6c152d6acabea5ff3e262fe344909046595..ea3b411a78495d0414b1956503b86cbd5f0ed765 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js -@@ -91,7 +91,7 @@ const fs = require('fs'); - const internalFS = require('internal/fs/utils'); +@@ -96,6 +96,7 @@ const assert = require('internal/assert'); + const fs = require('fs'); const path = require('path'); - const { sep } = path; --const { internalModuleStat } = internalBinding('fs'); + const { internalModuleStat } = internalBinding('fs'); +const internalFsBinding = internalBinding('fs'); const { safeGetenv } = internalBinding('credentials'); const { privateSymbols: { -@@ -182,7 +182,7 @@ function stat(filename) { +@@ -195,7 +196,7 @@ function stat(filename) { const result = statCache.get(filename); - if (result !== undefined) return result; + if (result !== undefined) { return result; } } - const result = internalModuleStat(filename); + const result = internalFsBinding.internalModuleStat(filename); @@ -44,19 +43,18 @@ index 3161afa33889f1682a1689e76fbcadc397f4b01c..84fea979d482d3d5cacfad4b09237e63 // Only set cache when `internalModuleStat(filename)` succeeds. statCache.set(filename, result); diff --git a/lib/internal/modules/package_json_reader.js b/lib/internal/modules/package_json_reader.js -index c6377faae6f5a827fc9b5c271ebc85f2df2f7177..8143e83ee39a03871642cfd6e7b8671fc4c3454d 100644 +index 88c079d10d116107aa34dc9281f64c799c48c0b5..146e2e49dc46c7f5302638f75cca4af548509d77 100644 --- a/lib/internal/modules/package_json_reader.js +++ b/lib/internal/modules/package_json_reader.js -@@ -8,7 +8,7 @@ const { - const { +@@ -13,6 +13,7 @@ const { ERR_INVALID_PACKAGE_CONFIG, } = require('internal/errors').codes; --const { internalModuleReadJSON } = internalBinding('fs'); + const { internalModuleReadJSON } = internalBinding('fs'); +const internalFsBinding = internalBinding('fs'); - const { toNamespacedPath } = require('path'); + const { resolve, sep, toNamespacedPath } = require('path'); + const permission = require('internal/process/permission'); const { kEmptyObject } = require('internal/util'); - -@@ -48,7 +48,7 @@ function read(jsonPath, { base, specifier, isESM } = kEmptyObject) { +@@ -53,7 +54,7 @@ function read(jsonPath, { base, specifier, isESM } = kEmptyObject) { const { 0: string, 1: containsKeys, diff --git a/patches/node/src_fix_compatility_with_upcoming_v8_12_1_apis.patch b/patches/node/src_fix_compatility_with_upcoming_v8_12_1_apis.patch index a645a6047d56..dc412df0b5af 100644 --- a/patches/node/src_fix_compatility_with_upcoming_v8_12_1_apis.patch +++ b/patches/node/src_fix_compatility_with_upcoming_v8_12_1_apis.patch @@ -55,10 +55,10 @@ index c9a455be8c395a2f231f56e0a54211466362aa1d..448075e354c760a2dbd1dd763f40b7a6 void UntrackContext(v8::Local context); diff --git a/src/js_native_api_v8.cc b/src/js_native_api_v8.cc -index 92f765eb0a99f92eac3ce77011e0ec787ccfcb8d..7e77c4692b4d9c4c5daa6ba01878a2219646eb62 100644 +index f08294a26a43923cfb47dde080e42b5cde0803a5..8d48105cb4822dde19982ce1c132f521ff8b27c9 100644 --- a/src/js_native_api_v8.cc +++ b/src/js_native_api_v8.cc -@@ -925,11 +925,8 @@ napi_define_class(napi_env env, +@@ -961,11 +961,8 @@ napi_define_class(napi_env env, env, p->setter, p->data, &setter_tpl)); } diff --git a/patches/node/test_fix_edge_snapshot_stack_traces.patch b/patches/node/test_fix_edge_snapshot_stack_traces.patch deleted file mode 100644 index 1f90d863a86c..000000000000 --- a/patches/node/test_fix_edge_snapshot_stack_traces.patch +++ /dev/null @@ -1,151 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Shelley Vohr -Date: Wed, 18 Oct 2023 10:40:34 +0200 -Subject: test: fix edge snapshot stack traces - -https://github.com/nodejs/node/pull/49659 - -diff --git a/test/common/assertSnapshot.js b/test/common/assertSnapshot.js -index 838ee86f74ea89e052676a5c25e23481369857fa..3aacfa064561c64c218fcc4e3090f7952cb1d218 100644 ---- a/test/common/assertSnapshot.js -+++ b/test/common/assertSnapshot.js -@@ -8,6 +8,10 @@ const assert = require('node:assert/strict'); - const stackFramesRegexp = /(?<=\n)(\s+)((.+?)\s+\()?(?:\(?(.+?):(\d+)(?::(\d+))?)\)?(\s+\{)?(\[\d+m)?(\n|$)/g; - const windowNewlineRegexp = /\r/g; - -+function replaceNodeVersion(str) { -+ return str.replaceAll(process.version, '*'); -+} -+ - function replaceStackTrace(str, replacement = '$1*$7$8\n') { - return str.replace(stackFramesRegexp, replacement); - } -@@ -84,6 +88,7 @@ async function spawnAndAssert(filename, transform = (x) => x, { tty = false, ... - module.exports = { - assertSnapshot, - getSnapshotPath, -+ replaceNodeVersion, - replaceFullPaths, - replaceStackTrace, - replaceWindowsLineEndings, -diff --git a/test/fixtures/errors/force_colors.snapshot b/test/fixtures/errors/force_colors.snapshot -index be1d45d0d8e8ba7b637754e32fe379cb2cf1e6ac..21410d492db861876ecfcb82dcc3c1815cba6d09 100644 ---- a/test/fixtures/errors/force_colors.snapshot -+++ b/test/fixtures/errors/force_colors.snapshot -@@ -4,11 +4,12 @@ throw new Error('Should include grayed stack trace') - - Error: Should include grayed stack trace - at Object. (/test*force_colors.js:1:7) -- at Module._compile (node:internal*modules*cjs*loader:1241:14) -- at Module._extensions..js (node:internal*modules*cjs*loader:1295:10) -- at Module.load (node:internal*modules*cjs*loader:1091:32) -- at Module._load (node:internal*modules*cjs*loader:938:12) -- at Function.executeUserEntryPoint [as runMain] (node:internal*modules*run_main:83:12) -- at node:internal*main*run_main_module:23:47 -+ at * -+ at * -+ at * -+ at * -+ at * -+ at * -+ at * - - Node.js * -diff --git a/test/fixtures/source-map/output/source_map_sourcemapping_url_string.snapshot b/test/fixtures/source-map/output/source_map_sourcemapping_url_string.snapshot -index 2c1e11eeb9eab1bcb101f8f5af909461b26036ec..6a109c904e115503b743d5c4e0418ae693ca9856 100644 ---- a/test/fixtures/source-map/output/source_map_sourcemapping_url_string.snapshot -+++ b/test/fixtures/source-map/output/source_map_sourcemapping_url_string.snapshot -@@ -1,3 +1,3 @@ - Error: an exception. - at Object. (*typescript-sourcemapping_url_string.ts:3:7) -- at Module._compile (node:internal*modules*cjs*loader:1241:14) -+ * -diff --git a/test/parallel/test-node-output-errors.mjs b/test/parallel/test-node-output-errors.mjs -index b08bcd40cdf26093e158c0bb9ae566c76f2c731e..bf8eacbac479a2bf5698ed29ede648e149f185b5 100644 ---- a/test/parallel/test-node-output-errors.mjs -+++ b/test/parallel/test-node-output-errors.mjs -@@ -10,15 +10,15 @@ const skipForceColors = - process.config.variables.node_shared_openssl || - (common.isWindows && (Number(os.release().split('.')[0]) !== 10 || Number(os.release().split('.')[2]) < 14393)); // See https://github.com/nodejs/node/pull/33132 - -- --function replaceNodeVersion(str) { -- return str.replaceAll(process.version, '*'); --} -- - function replaceStackTrace(str) { - return snapshot.replaceStackTrace(str, '$1at *$7\n'); - } - -+function replaceForceColorsStackTrace(str) { -+ // eslint-disable-next-line no-control-regex -+ return str.replaceAll(/(\[90m\W+)at .*node:.*/g, '$1at *'); -+} -+ - describe('errors output', { concurrency: true }, () => { - function normalize(str) { - return str.replaceAll(snapshot.replaceWindowsPaths(process.cwd()), '') -@@ -35,9 +35,12 @@ describe('errors output', { concurrency: true }, () => { - } - const common = snapshot - .transform(snapshot.replaceWindowsLineEndings, snapshot.replaceWindowsPaths); -- const defaultTransform = snapshot.transform(common, normalize, replaceNodeVersion); -- const errTransform = snapshot.transform(common, normalizeNoNumbers, replaceNodeVersion); -- const promiseTransform = snapshot.transform(common, replaceStackTrace, normalizeNoNumbers, replaceNodeVersion); -+ const defaultTransform = snapshot.transform(common, normalize, snapshot.replaceNodeVersion); -+ const errTransform = snapshot.transform(common, normalizeNoNumbers, snapshot.replaceNodeVersion); -+ const promiseTransform = snapshot.transform(common, replaceStackTrace, -+ normalizeNoNumbers, snapshot.replaceNodeVersion); -+ const forceColorsTransform = snapshot.transform(common, normalize, -+ replaceForceColorsStackTrace, snapshot.replaceNodeVersion); - - const tests = [ - { name: 'errors/async_error_eval_cjs.js' }, -@@ -57,7 +60,11 @@ describe('errors output', { concurrency: true }, () => { - { name: 'errors/throw_in_line_with_tabs.js', transform: errTransform }, - { name: 'errors/throw_non_error.js', transform: errTransform }, - { name: 'errors/promise_always_throw_unhandled.js', transform: promiseTransform }, -- { skip: skipForceColors, name: 'errors/force_colors.js', env: { FORCE_COLOR: 1 } }, -+ !skipForceColors ? { -+ name: 'errors/force_colors.js', -+ transform: forceColorsTransform, -+ env: { FORCE_COLOR: 1 } -+ } : null, - ]; - for (const { name, transform = defaultTransform, env, skip = false } of tests) { - it(name, { skip }, async () => { -diff --git a/test/parallel/test-node-output-sourcemaps.mjs b/test/parallel/test-node-output-sourcemaps.mjs -index 2043fa57f06a8d2326a4ea1ba24341502c8b7471..b01f30765c7de81a4d956b9c1124affea0fc2aef 100644 ---- a/test/parallel/test-node-output-sourcemaps.mjs -+++ b/test/parallel/test-node-output-sourcemaps.mjs -@@ -4,10 +4,6 @@ import * as snapshot from '../common/assertSnapshot.js'; - import * as path from 'node:path'; - import { describe, it } from 'node:test'; - --function replaceNodeVersion(str) { -- return str.replaceAll(process.version, '*'); --} -- - describe('sourcemaps output', { concurrency: true }, () => { - function normalize(str) { - const result = str -@@ -16,7 +12,8 @@ describe('sourcemaps output', { concurrency: true }, () => { - .replaceAll('/Users/bencoe/oss/coffee-script-test', '') - .replaceAll(/\/(\w)/g, '*$1') - .replaceAll('*test*', '*') -- .replaceAll('*fixtures*source-map*', '*'); -+ .replaceAll('*fixtures*source-map*', '*') -+ .replaceAll(/(\W+).*node:internal\*modules.*/g, '$1*'); - if (common.isWindows) { - const currentDeviceLetter = path.parse(process.cwd()).root.substring(0, 1).toLowerCase(); - const regex = new RegExp(`${currentDeviceLetter}:/?`, 'gi'); -@@ -25,7 +22,8 @@ describe('sourcemaps output', { concurrency: true }, () => { - return result; - } - const defaultTransform = snapshot -- .transform(snapshot.replaceWindowsLineEndings, snapshot.replaceWindowsPaths, normalize, replaceNodeVersion); -+ .transform(snapshot.replaceWindowsLineEndings, snapshot.replaceWindowsPaths, -+ normalize, snapshot.replaceNodeVersion); - - const tests = [ - { name: 'source-map/output/source_map_disabled_by_api.js' }, diff --git a/patches/node/test_formally_mark_some_tests_as_flaky.patch b/patches/node/test_formally_mark_some_tests_as_flaky.patch index 1849183e973e..7b879e6d957f 100644 --- a/patches/node/test_formally_mark_some_tests_as_flaky.patch +++ b/patches/node/test_formally_mark_some_tests_as_flaky.patch @@ -7,13 +7,13 @@ Instead of disabling the tests, flag them as flaky so they still run but don't cause CI failures on flakes. diff --git a/test/parallel/parallel.status b/test/parallel/parallel.status -index fe8ddee7cbf05e0d4dbbe970cdc357ec6841390c..1ba65e26d293e9524e6c756b3a66693d46b4bdfd 100644 +index fa425fdcfc475ba2d5ba9a2492ea4481914a7cce..840c2f657467ede0e3737ea1aee55e07e39f353a 100644 --- a/test/parallel/parallel.status +++ b/test/parallel/parallel.status -@@ -7,6 +7,13 @@ prefix parallel +@@ -5,6 +5,13 @@ prefix parallel + # sample-test : PASS,FLAKY + [true] # This section applies to all platforms - # https://github.com/nodejs/node/issues/49853 - test-runner-output: PASS,FLAKY +test-inspector-multisession-ws: PASS, FLAKY +test-heapsnapshot-near-heap-limit-by-api-in-worker: PASS, FLAKY +test-heapsnapshot-near-heap-limit-worker: PASS, FLAKY @@ -25,7 +25,7 @@ index fe8ddee7cbf05e0d4dbbe970cdc357ec6841390c..1ba65e26d293e9524e6c756b3a66693d [$system==win32] # https://github.com/nodejs/node/issues/41206 diff --git a/test/sequential/sequential.status b/test/sequential/sequential.status -index 5cefcb95773bedc80bc462e058a11045be176741..33f50be5898754af696468499bcfa8e3c721434d 100644 +index a5e2d38ff31aa8b90f3b99783b16cec086b4f30e..b8afe3d88b5af4756663f45fad81105e9b7f0e7e 100644 --- a/test/sequential/sequential.status +++ b/test/sequential/sequential.status @@ -7,6 +7,18 @@ prefix sequential diff --git a/script/node-disabled-tests.json b/script/node-disabled-tests.json index 593ece62e65e..6812d691ed90 100644 --- a/script/node-disabled-tests.json +++ b/script/node-disabled-tests.json @@ -1,5 +1,6 @@ [ "abort/test-abort-backtrace", + "es-module/test-vm-compile-function-lineoffset", "parallel/test-bootstrap-modules", "parallel/test-child-process-fork-exec-path", "parallel/test-code-cache", @@ -21,9 +22,9 @@ "parallel/test-dgram-send-cb-quelches-error", "parallel/test-fs-utimes-y2K38", "parallel/test-http2-clean-output", - "parallel/test-http2-https-fallback.js", - "parallel/test-http2-server-unknown-protocol.js", - "parallel/test-tls-alpn-server-client.js", + "parallel/test-http2-https-fallback", + "parallel/test-http2-server-unknown-protocol", + "parallel/test-tls-alpn-server-client", "parallel/test-https-agent-session-reuse", "parallel/test-https-options-boolean-check", "parallel/test-icu-env", diff --git a/spec/esm-spec.ts b/spec/esm-spec.ts index 27a0a77f6454..0e2dbc6d30bd 100644 --- a/spec/esm-spec.ts +++ b/spec/esm-spec.ts @@ -162,8 +162,19 @@ describe('esm', () => { }); describe('with context isolation', () => { + let badFilePath = ''; + + beforeEach(async () => { + badFilePath = path.resolve(path.resolve(os.tmpdir(), 'bad-file.badjs')); + await fs.promises.writeFile(badFilePath, 'const foo = "bar";'); + }); + + afterEach(async () => { + await fs.promises.unlink(badFilePath); + }); + it('should use nodes esm dynamic loader in the isolated context', async () => { - const [, preloadError] = await loadWindowWithPreload(`await import(${JSON.stringify(hostsUrl)})`, { + const [, preloadError] = await loadWindowWithPreload(`await import(${JSON.stringify((pathToFileURL(badFilePath)))})`, { nodeIntegration: true, sandbox: false, contextIsolation: true