Skip to content

Commit 395af82

Browse files
authored
Use correct flag to determine if V8 Sandboxing is enabled (WiseLibs#1373)
use correct v8 sandbox flag, swap if/else
1 parent ae953ec commit 395af82

File tree

2 files changed

+19
-14
lines changed

2 files changed

+19
-14
lines changed

src/better_sqlite3.cpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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
3737
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;
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) {

src/util/macros.lzz

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -179,16 +179,18 @@ void SetPrototypeGetter(
179179
#endif
180180
}
181181
#end
182-
183182
#src
184-
#ifndef V8_COMPRESS_POINTERS_IN_SHARED_CAGE
185-
#define SAFE_NEW_BUFFER(env, data, length, finalizeCallback, finalizeHint) node::Buffer::New(env, data, length, finalizeCallback, finalizeHint)
186-
#else
183+
#if defined(V8_ENABLE_SANDBOX)
184+
// When V8 Sandbox is enabled (in newer Electron versions), we need to use Buffer::Copy
185+
// instead of Buffer::New to ensure the ArrayBuffer backing store is allocated inside the sandbox
187186
static inline v8::MaybeLocal<v8::Object> BufferSandboxNew(v8::Isolate* isolate, char* data, size_t length, void (*finalizeCallback)(char*, void*), void* finalizeHint) {
188-
v8::MaybeLocal<v8::Object> buffer = node::Buffer::Copy(isolate, data, length);
189-
finalizeCallback(data, finalizeHint);
190-
return buffer;
187+
v8::MaybeLocal<v8::Object> buffer = node::Buffer::Copy(isolate, data, length);
188+
finalizeCallback(data, finalizeHint);
189+
return buffer;
191190
}
192191
#define SAFE_NEW_BUFFER(env, data, length, finalizeCallback, finalizeHint) BufferSandboxNew(env, data, length, finalizeCallback, finalizeHint)
192+
#else
193+
// When V8 Sandbox is not enabled, we can use the more efficient Buffer::New
194+
#define SAFE_NEW_BUFFER(env, data, length, finalizeCallback, finalizeHint) node::Buffer::New(env, data, length, finalizeCallback, finalizeHint)
193195
#endif
194196
#end

0 commit comments

Comments
 (0)