forked from electron/electron
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
repl: fix crash when SharedArrayBuffer disabled (electron#30483)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
- Loading branch information
1 parent
1401789
commit 30a2a0b
Showing
2 changed files
with
64 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
63 changes: 63 additions & 0 deletions
63
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,63 @@ | ||
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 d6434ff96e118535bc6ded88ee4d2f0ff253a8f7..1b8894f44e71c6f25f1f50e84293006afe158513 100644 | ||
--- a/lib/internal/main/worker_thread.js | ||
+++ b/lib/internal/main/worker_thread.js | ||
@@ -9,7 +9,7 @@ const { | ||
ArrayPrototypeSplice, | ||
ObjectDefineProperty, | ||
PromisePrototypeCatch, | ||
- globalThis: { Atomics }, | ||
+ globalThis: { Atomics, SharedArrayBuffer }, | ||
} = primordials; | ||
|
||
const { | ||
@@ -140,6 +140,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 931bce0c518fc3355a9f94a7760556b6f0b75b96..99baa3e7f747bb3b351cb13c6ed512f2bb88812a 100644 | ||
--- a/lib/internal/worker.js | ||
+++ b/lib/internal/worker.js | ||
@@ -92,7 +92,8 @@ let cwdCounter; | ||
|
||
const environmentData = new SafeMap(); | ||
|
||
-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) { |