electron/patches/node/repl_fix_crash_when_sharedarraybuffer_disabled.patch
electron-roller[bot] e61728beb9
chore: bump node to v18.15.0 (main) (#37532)
* chore: bump node in DEPS to v18.15.0

* chore: update patches

* chore: update node filenames patch

* chore: re-enable parallel/test-intl

* chore: disable parallel/test-webcrypto-wrap-unwrap

---------

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2023-03-13 09:51:03 -04:00

62 lines
2.5 KiB
Diff

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 7270f9f01c98ece3dc38bf56d270d7e08d39f66e..44db021ad37af4ae9c4526a405cea8bc3c1909a5 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 fe2e132af1166a05c3e94cdae362dd46f62bf65b..caa9214fa30a715a5eea00e7fc3b091e40c07131 100644
--- a/lib/internal/main/worker_thread.js
+++ b/lib/internal/main/worker_thread.js
@@ -10,7 +10,7 @@ const {
ObjectDefineProperty,
PromisePrototypeThen,
RegExpPrototypeExec,
- globalThis: { Atomics },
+ globalThis: { Atomics, SharedArrayBuffer },
} = primordials;
const {
@@ -113,6 +113,8 @@ port.on('message', (message) => {
process.cwd = function() {
const currentCounter = Atomics.load(cwdCounter, 0);
+ // SharedArrayBuffers can be disabled with --no-harmony-sharedarraybuffer.
+ if (typeof SharedArrayBuffer === 'undefined') return originalCwd();
if (currentCounter === lastCounter)
return cachedCwd;
lastCounter = currentCounter;
diff --git a/lib/internal/worker.js b/lib/internal/worker.js
index 8e396195209b83dff572792a78ee75d12d1f6610..4bb09b6ab5c31206a622814cbcd793c434b885d4 100644
--- a/lib/internal/worker.js
+++ b/lib/internal/worker.js
@@ -91,7 +91,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) {