From 6600a2e5e052579ef067d647ddc9349338564d18 Mon Sep 17 00:00:00 2001 From: ndossche Date: Fri, 29 May 2026 11:17:34 +0200 Subject: [PATCH] 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 --- src/node_sqlite.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/node_sqlite.cc b/src/node_sqlite.cc index 522d3c24cfba70..2619c12db2d782 100644 --- a/src/node_sqlite.cc +++ b/src/node_sqlite.cc @@ -3836,7 +3836,9 @@ void Session::Changeset(const FunctionCallbackInfo& args) { auto freeChangeset = OnScopeLeave([&] { sqlite3_free(pChangeset); }); Local buffer = ArrayBuffer::New(env->isolate(), nChangeset); - std::memcpy(buffer->GetBackingStore()->Data(), pChangeset, nChangeset); + if (nChangeset > 0) { + std::memcpy(buffer->GetBackingStore()->Data(), pChangeset, nChangeset); + } Local uint8Array = Uint8Array::New(buffer, 0, nChangeset); args.GetReturnValue().Set(uint8Array);