Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: repl crash when SharedArrayBuffer disabled (#30484)
* repl: fix crash when SharedArrayBuffer disabled * fixup node .patches file * update patch for 14-x-y Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
- Loading branch information
1 parent
1d84b38
commit 8c6240a
Showing
2 changed files
with
55 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
54 changes: 54 additions & 0 deletions
54
patches/node/repl_fix_crash_when_sharedarraybuffer_disabled.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Shelley Vohr <shelley.vohr@gmail.com> | ||
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) { |