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>
PR-URL: https://github.com/nodejs/node/pull/63637
Reviewed-By: René <contact.9a5d6388@renegade334.me.uk>
This commit is contained in:
Nora Dossche authored and GitHub committed 2026-08-06 03:18:25 +00:00
1 parent 51c0d94072
commit c18fd9060b
1 file changed
+3 -1
+3 -1
View File
@@ -3936,7 +3936,9 @@ void Session::Changeset(const FunctionCallbackInfo<Value>& args) {
auto freeChangeset = OnScopeLeave([&] { sqlite3_free(pChangeset); });
Local<ArrayBuffer> 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 = Uint8Array::New(buffer, 0, nChangeset);
args.GetReturnValue().Set(uint8Array);