mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
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>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
Reference in New Issue
Block a user