@@ -30,16 +30,19 @@ void SetPrototypeGetter(
30
30
);
31
31
#endif
32
32
}
33
- #line 184 "./src/util/macros.lzz"
34
- #ifndef V8_COMPRESS_POINTERS_IN_SHARED_CAGE
35
- # define SAFE_NEW_BUFFER ( env, data, length, finalizeCallback, finalizeHint ) node::Buffer::New(env, data, length, finalizeCallback, finalizeHint)
36
- # else
33
+ #line 183 "./src/util/macros.lzz"
34
+ #if defined(V8_ENABLE_SANDBOX)
35
+ // When V8 Sandbox is enabled (in newer Electron versions), we need to use Buffer::Copy
36
+ // instead of Buffer::New to ensure the ArrayBuffer backing store is allocated inside the sandbox
37
37
static inline v8::MaybeLocal<v8::Object> BufferSandboxNew (v8::Isolate* isolate, char * data, size_t length, void (*finalizeCallback)(char *, void *), void* finalizeHint) {
38
- v8::MaybeLocal<v8::Object> buffer = node::Buffer::Copy (isolate, data, length);
39
- finalizeCallback (data, finalizeHint);
40
- return buffer;
38
+ v8::MaybeLocal<v8::Object> buffer = node::Buffer::Copy (isolate, data, length);
39
+ finalizeCallback (data, finalizeHint);
40
+ return buffer;
41
41
}
42
42
#define SAFE_NEW_BUFFER (env, data, length, finalizeCallback, finalizeHint ) BufferSandboxNew(env, data, length, finalizeCallback, finalizeHint)
43
+ #else
44
+ // When V8 Sandbox is not enabled, we can use the more efficient Buffer::New
45
+ #define SAFE_NEW_BUFFER (env, data, length, finalizeCallback, finalizeHint ) node::Buffer::New(env, data, length, finalizeCallback, finalizeHint)
43
46
#endif
44
47
#line 39 "./src/util/binder.lzz"
45
48
static bool IsPlainObject (v8::Isolate* isolate, v8::Local<v8::Object> obj) {
0 commit comments