From: drh Date: Tue, 28 Apr 2015 14:00:02 +0000 (+0000) Subject: Fix sqlite3VdbeMakeWritable() to always clear the MEM_Ephem flag. X-Git-Tag: version-3.8.10~36 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bd6789e761b19e99e5bff6c3e55a3bddfc02346e;p=thirdparty%2Fsqlite.git Fix sqlite3VdbeMakeWritable() to always clear the MEM_Ephem flag. Change the OP_Move opcode to always deephemeralize moved content. FossilOrigin-Name: fbb06727181eac1470b2dd458d2d159146439d21 --- diff --git a/manifest b/manifest index 98f2b79dbb..ec3ba7e25b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Shift\sthe\sMem.pScopyFrom\spointer\sin\sthe\scorrect\sdirection\sin\sOP_Move.\nFix\sfor\sa\sdefective\scheck-in\s[a2135ad13049]\sand\sticket\s[d6352363751].\nDebugging\scode\sonly\s-\sdoes\snot\saffect\snormal\soperation. -D 2015-04-28T12:44:55.671 +C Fix\ssqlite3VdbeMakeWritable()\sto\salways\sclear\sthe\sMEM_Ephem\sflag.\nChange\sthe\sOP_Move\sopcode\sto\salways\sdeephemeralize\smoved\scontent. +D 2015-04-28T14:00:02.605 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in e3268d234210842b4be0a6e2e1c5990999f1d9f4 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -293,13 +293,13 @@ F src/update.c 3c4ecc282accf12d39edb8d524cf089645e55a13 F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c F src/util.c a6431c92803b975b7322724a7b433e538d243539 F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701 -F src/vdbe.c 74507905e92fec055e23895cb6b8dc322b9aacfc +F src/vdbe.c dca4bf7a0e674ed10912e18cefa6d12768d11cbd F src/vdbe.h 7e538ecf47dccb307ea2d087c3ddc2dd8d70e79d F src/vdbeInt.h 9cbaa84f53ddd2d09a0cf61a94337a3a035d08a0 F src/vdbeapi.c 583d56b129dd27f12bed518270de9ebe521e6a75 F src/vdbeaux.c 03591cca98ec50e1493043f0ff7abbece0b9c83d F src/vdbeblob.c 4f2e8e075d238392df98c5e03a64342465b03f90 -F src/vdbemem.c b5256445b318b0f2b3bc429028469cfbb08f19a5 +F src/vdbemem.c 7bfbeef0978a2e1a05d979641fdbf7c189b7ddf4 F src/vdbesort.c 2e7f683464fd5db3be4beaa1ff2d39e24fcb64b8 F src/vdbetrace.c f95c2dff9041fcf07f871789c22ebb0648ea0b7c F src/vtab.c 5f81f8a59c1f5ddb94c918f25ed5d83578fcc633 @@ -1255,7 +1255,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 60174cf572f8788e67a0434d5fe763724d7425a3 -R 773b440150500b57e22af35317620b77 +P add4e043b35f9c454dea7b888eef1c1e14d791f1 +R f7334524d04c391c1db9b57676cc23de U drh -Z c14a7cb7a900290985ef094e06bbaf04 +Z c39c343fcde018c720bba13c4eb69466 diff --git a/manifest.uuid b/manifest.uuid index 1c4c549273..67174ada3d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -add4e043b35f9c454dea7b888eef1c1e14d791f1 \ No newline at end of file +fbb06727181eac1470b2dd458d2d159146439d21 \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index 1bbd691660..5dee2340d2 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -1205,10 +1205,11 @@ case OP_Move: { memAboutToChange(p, pOut); sqlite3VdbeMemMove(pOut, pIn1); #ifdef SQLITE_DEBUG - if( pOut->pScopyFrom>=&aMem[p1] && pOut->pScopyFrom<&aMem[p1+pOp->p3] ){ + if( pOut->pScopyFrom>=&aMem[p1] && pOut->pScopyFrompScopyFrom += pOp->p2 - p1; } #endif + Deephemeralize(pOut); REGISTER_TRACE(p2++, pOut); pIn1++; pOut++; diff --git a/src/vdbemem.c b/src/vdbemem.c index 7c9a2d919b..2fd6a71895 100644 --- a/src/vdbemem.c +++ b/src/vdbemem.c @@ -200,10 +200,11 @@ int sqlite3VdbeMemMakeWriteable(Mem *pMem){ pMem->z[pMem->n] = 0; pMem->z[pMem->n+1] = 0; pMem->flags |= MEM_Term; + } + pMem->flags &= ~MEM_Ephem; #ifdef SQLITE_DEBUG - pMem->pScopyFrom = 0; + pMem->pScopyFrom = 0; #endif - } return SQLITE_OK; }