diff options
author | drh <drh@noemail.net> | 2015-04-28 14:00:02 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2015-04-28 14:00:02 +0000 |
commit | bd6789e761b19e99e5bff6c3e55a3bddfc02346e (patch) | |
tree | e3bca71e301e7530329f153dd0798ce2f92f4346 /src | |
parent | 5fb71254e4d94213c0ff23563b19a5f2a9b1e978 (diff) | |
download | sqlite-bd6789e761b19e99e5bff6c3e55a3bddfc02346e.tar.gz sqlite-bd6789e761b19e99e5bff6c3e55a3bddfc02346e.zip |
Fix sqlite3VdbeMakeWritable() to always clear the MEM_Ephem flag.
Change the OP_Move opcode to always deephemeralize moved content.
FossilOrigin-Name: fbb06727181eac1470b2dd458d2d159146439d21
Diffstat (limited to 'src')
-rw-r--r-- | src/vdbe.c | 3 | ||||
-rw-r--r-- | src/vdbemem.c | 5 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/vdbe.c b/src/vdbe.c index 1bbd69166..5dee2340d 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->pScopyFrom<pOut ){ pOut->pScopyFrom += pOp->p2 - p1; } #endif + Deephemeralize(pOut); REGISTER_TRACE(p2++, pOut); pIn1++; pOut++; diff --git a/src/vdbemem.c b/src/vdbemem.c index 7c9a2d919..2fd6a7189 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; } |