aboutsummaryrefslogtreecommitdiff
path: root/src/vdbeaux.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2020-01-10 01:05:49 +0000
committerdrh <drh@noemail.net>2020-01-10 01:05:49 +0000
commitb2fe5a7c35a114e8d4b869968c61c7b6a9a99cb7 (patch)
treeba4583cdfbe56b56fb40b03dd801d06251a34c85 /src/vdbeaux.c
parente5f88010441d15b70fb3cbd9a4833c5d545e8c4c (diff)
downloadsqlite-b2fe5a7c35a114e8d4b869968c61c7b6a9a99cb7.tar.gz
sqlite-b2fe5a7c35a114e8d4b869968c61c7b6a9a99cb7.zip
Fix to the register validity tracking logic in debug builds. No impact
on release builds. FossilOrigin-Name: 0a500da6aa659a8e73206e6d22ddbf2da5e4f1d1d551eeb66433163a3e13109d
Diffstat (limited to 'src/vdbeaux.c')
-rw-r--r--src/vdbeaux.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/vdbeaux.c b/src/vdbeaux.c
index 8b01fdec6..fab8b705c 100644
--- a/src/vdbeaux.c
+++ b/src/vdbeaux.c
@@ -1209,14 +1209,16 @@ void sqlite3VdbeReleaseRegisters(
assert( pParse->pVdbe );
assert( iFirst>=1 );
assert( iFirst+N-1<=pParse->nMem );
- while( N>0 && (mask&1)!=0 ){
- mask >>= 1;
- iFirst++;
- N--;
- }
- while( N>0 && N<=32 && (mask & MASKBIT32(N-1))!=0 ){
- mask &= ~MASKBIT32(N-1);
- N--;
+ if( N<=31 && mask!=0 ){
+ while( N>0 && (mask&1)!=0 ){
+ mask >>= 1;
+ iFirst++;
+ N--;
+ }
+ while( N>0 && N<=32 && (mask & MASKBIT32(N-1))!=0 ){
+ mask &= ~MASKBIT32(N-1);
+ N--;
+ }
}
if( N>0 ){
sqlite3VdbeAddOp3(pParse->pVdbe, OP_ReleaseReg, iFirst, N, *(int*)&mask);