aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2015-04-28 14:00:02 +0000
committerdrh <drh@noemail.net>2015-04-28 14:00:02 +0000
commitbd6789e761b19e99e5bff6c3e55a3bddfc02346e (patch)
treee3bca71e301e7530329f153dd0798ce2f92f4346 /src
parent5fb71254e4d94213c0ff23563b19a5f2a9b1e978 (diff)
downloadsqlite-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.c3
-rw-r--r--src/vdbemem.c5
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;
}