Skip to content

Commit 6600a2e

Browse files
committed
sqlite: fix undefined behaviour in Session::Changeset()
If `nChangeset == 0`, the pointer `pChangeset` may be nullptr. Passing a nullptr to `memcpy()` is undefined behaviour. This can be triggered by running the test suite under UBSAN. Signed-off-by: ndossche <nora.dossche@ugent.be>
1 parent 40dc5a1 commit 6600a2e

1 file changed

Lines changed: 3 additions & 1 deletion

File tree

src/node_sqlite.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3836,7 +3836,9 @@ void Session::Changeset(const FunctionCallbackInfo<Value>& args) {
38363836
auto freeChangeset = OnScopeLeave([&] { sqlite3_free(pChangeset); });
38373837

38383838
Local<ArrayBuffer> buffer = ArrayBuffer::New(env->isolate(), nChangeset);
3839-
std::memcpy(buffer->GetBackingStore()->Data(), pChangeset, nChangeset);
3839+
if (nChangeset > 0) {
3840+
std::memcpy(buffer->GetBackingStore()->Data(), pChangeset, nChangeset);
3841+
}
38403842
Local<Uint8Array> uint8Array = Uint8Array::New(buffer, 0, nChangeset);
38413843

38423844
args.GetReturnValue().Set(uint8Array);

0 commit comments

Comments
 (0)