Skip to content

Commit cdb732b

Browse files
ndosscheaduh95
authored andcommitted
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: #63637 Reviewed-By: René <contact.9a5d6388@renegade334.me.uk>
1 parent cfad1d5 commit cdb732b

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
@@ -3890,7 +3890,9 @@ void Session::Changeset(const FunctionCallbackInfo<Value>& args) {
38903890
auto freeChangeset = OnScopeLeave([&] { sqlite3_free(pChangeset); });
38913891

38923892
Local<ArrayBuffer> buffer = ArrayBuffer::New(env->isolate(), nChangeset);
3893-
std::memcpy(buffer->GetBackingStore()->Data(), pChangeset, nChangeset);
3893+
if (nChangeset > 0) {
3894+
std::memcpy(buffer->GetBackingStore()->Data(), pChangeset, nChangeset);
3895+
}
38943896
Local<Uint8Array> uint8Array = Uint8Array::New(buffer, 0, nChangeset);
38953897

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

0 commit comments

Comments
 (0)