@@ -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