@@ -30,16 +30,19 @@ void SetPrototypeGetter(
3030 );
3131 #endif
3232}
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
3737static 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;
4141}
4242#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)
4346#endif
4447#line 39 "./src/util/binder.lzz"
4548 static bool IsPlainObject (v8::Isolate* isolate, v8::Local<v8::Object> obj) {
0 commit comments