From 526740b1b91820e4e0944dd9905be91cec281f12 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 24 Aug 2017 13:55:46 +0000 Subject: [PATCH] Make sure the sqlite3_result_pointer() interface does not leave a VM register in an inconsistent state. Fix for ticket [7486aa54b968e9b5]. Test cases are in TH3. FossilOrigin-Name: d2f9230c5c7ad6166e7d2b649f77960fa58b1cb583e529a43882753ab348413c --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/vdbeapi.c | 3 ++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 9a9edb7494..0da8256bdb 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Performance\soptimization\sto\spageFindSlot()\sin\sthe\sb-tree\slayer. -D 2017-08-23T23:09:03.990 +C Make\ssure\sthe\ssqlite3_result_pointer()\sinterface\sdoes\snot\sleave\sa\sVM\sregister\nin\san\sinconsistent\sstate.\s\sFix\sfor\sticket\s[7486aa54b968e9b5].\s\sTest\scases\nare\sin\sTH3. +D 2017-08-24T13:55:46.912 F Makefile.in c644bbe8ebe4aae82ad6783eae6b6beea4c727b99ff97568b847ced5e2ac7afb F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 25b154da7f0b3d4924f27378c1f8d006285b80811f1ccf3ed953dbebf6282136 @@ -527,7 +527,7 @@ F src/vacuum.c 90839322fd5f00df9617eb21b68beda9b6e2a2937576b0d65985e4aeb1c53739 F src/vdbe.c 82fc4553a0986a06bdd0d2b03a424e159bba5c74802fabb2841aa6cd27ccd962 F src/vdbe.h d50cadf12bcf9fb99117ef392ce1ea283aa429270481426b6e8b0280c101fd97 F src/vdbeInt.h 1fe00770144c12c4913128f35262d11527ef3284561baaab59b947a41c08d0d9 -F src/vdbeapi.c 05d6b14ab73952db0d73f6452d6960216997bd966a710266b2fe051f25326abc +F src/vdbeapi.c 9c670ca0dcc1cd86373aa353b747b26fe531ca5cd4331690c611d1f03842e2a1 F src/vdbeaux.c 2dff8186d34e0e525838f77b2fac70bd480f0273a77015bf21b6a08f2792da82 F src/vdbeblob.c db3cf91060f6f4b2f1358a4200e844697990752177784c7c95da00b7ac9f1c7b F src/vdbemem.c 2f9d672af5260f0145787e1dc2c6985414987cc0dc575133a0dc17dda767d868 @@ -1650,7 +1650,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P bc1ec123ce05c9d16b0942f870381145dc9725764e47806939ff207a73066f4d -R f6b2325c9199ea50423580e65f552033 +P 59560d079fab4b91ec50855cc60349da178209c38fb6dae674ff874ccfc7f5fa +R f928c1195d839713ee78e6b46c1884f1 U drh -Z 8c1fbb63bd6c44847b2e56eee310d2d1 +Z fae59aff59c16e3b9c2ad1cd0f0e8fa3 diff --git a/manifest.uuid b/manifest.uuid index 7fb20a017d..c161e3d95e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -59560d079fab4b91ec50855cc60349da178209c38fb6dae674ff874ccfc7f5fa \ No newline at end of file +d2f9230c5c7ad6166e7d2b649f77960fa58b1cb583e529a43882753ab348413c \ No newline at end of file diff --git a/src/vdbeapi.c b/src/vdbeapi.c index 3f4ef8f6a9..b9df40b8fd 100644 --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@ -398,7 +398,8 @@ void sqlite3_result_pointer( ){ Mem *pOut = pCtx->pOut; assert( sqlite3_mutex_held(pOut->db->mutex) ); - sqlite3VdbeMemSetNull(pOut); + sqlite3VdbeMemRelease(pOut); + pOut->flags = MEM_Null; sqlite3VdbeMemSetPointer(pOut, pPtr, zPType, xDestructor); } void sqlite3_result_subtype(sqlite3_context *pCtx, unsigned int eSubtype){