diff --git a/patches/node/.patches b/patches/node/.patches index 0275693b13434..3ea2422035146 100644 --- a/patches/node/.patches +++ b/patches/node/.patches @@ -35,3 +35,4 @@ fix_handle_new_tostring_behavior_in_v8_serdes_test.patch node-api_faster_threadsafe_function.patch src_remove_extra_semi_after_member_fn.patch errors_refactor_to_use_more_primordials.patch +repl_fix_crash_when_sharedarraybuffer_disabled.patch diff --git a/patches/node/repl_fix_crash_when_sharedarraybuffer_disabled.patch b/patches/node/repl_fix_crash_when_sharedarraybuffer_disabled.patch new file mode 100644 index 0000000000000..93dbc8ceb3fc9 --- /dev/null +++ b/patches/node/repl_fix_crash_when_sharedarraybuffer_disabled.patch @@ -0,0 +1,54 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Shelley Vohr +Date: Mon, 9 Aug 2021 18:42:15 +0200 +Subject: repl: fix crash when SharedArrayBuffer disabled + +It's possible for SharedArrayBuffers to be disabled with +--no-harmony-sharedarraybuffer so we first need to check that this +isn't the case before attempting to use them in the repl or a crash occurs. + +Upstreamed at https://github.com/nodejs/node/pull/39718. + +diff --git a/benchmark/worker/atomics-wait.js b/benchmark/worker/atomics-wait.js +index a771b1813731edf4f0dd60f3505799e389f1d876..b9461677e2d7d1df192e752496e62cca837717b5 100644 +--- a/benchmark/worker/atomics-wait.js ++++ b/benchmark/worker/atomics-wait.js +@@ -7,6 +7,10 @@ const bench = common.createBenchmark(main, { + }); + + function main({ n }) { ++ if (typeof SharedArrayBuffer === 'undefined') { ++ throw new Error('SharedArrayBuffers must be enabled to run this benchmark'); ++ } ++ + const i32arr = new Int32Array(new SharedArrayBuffer(4)); + bench.start(); + for (let i = 0; i < n; i++) +diff --git a/lib/internal/main/worker_thread.js b/lib/internal/main/worker_thread.js +index 6f8cb6b942b5f295e6195e18059736df4bff8756..a2faa5c4a12f3af84dbfc4a3e4485d4ee5ce0167 100644 +--- a/lib/internal/main/worker_thread.js ++++ b/lib/internal/main/worker_thread.js +@@ -132,6 +132,9 @@ port.on('message', (message) => { + const originalCwd = process.cwd; + + process.cwd = function() { ++ // SharedArrayBuffers can be disabled with --no-harmony-sharedarraybuffer. ++ if (typeof SharedArrayBuffer === 'undefined') return originalCwd(); ++ + const currentCounter = Atomics.load(cwdCounter, 0); + if (currentCounter === lastCounter) + return cachedCwd; +diff --git a/lib/internal/worker.js b/lib/internal/worker.js +index d38649c7fb158361096d5a7a3b5bd629ba7b6d0b..468e85cacb09f3e4b3dd5603d5f54a010c7ff751 100644 +--- a/lib/internal/worker.js ++++ b/lib/internal/worker.js +@@ -81,7 +81,8 @@ let debug = require('internal/util/debuglog').debuglog('worker', (fn) => { + + let cwdCounter; + +-if (isMainThread) { ++// SharedArrayBuffers can be disabled with --no-harmony-sharedarraybuffer. ++if (isMainThread && typeof SharedArrayBuffer !== 'undefined') { + cwdCounter = new Uint32Array(new SharedArrayBuffer(4)); + const originalChdir = process.chdir; + process.chdir = function(path) {