1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-07 02:42:48 +03:00

Make sure sqlite3_value_dup() works correctly even for sqlite3_value

objects that are marked SQLITE_STATIC.

FossilOrigin-Name: f332ffc39b7a17fd6254d8dc699293a57a508ba0
This commit is contained in:
drh
2015-05-22 21:04:54 +00:00
parent 9dfedc8246
commit 10ca5b4809
3 changed files with 12 additions and 13 deletions

View File

@@ -224,12 +224,11 @@ sqlite3_value *sqlite3_value_dup(const sqlite3_value *pOrig){
pNew->flags &= ~MEM_Dyn;
pNew->db = 0;
if( pNew->flags&(MEM_Str|MEM_Blob) ){
if( 0==(pOrig->flags&MEM_Static) ){
pNew->flags |= MEM_Ephem;
if( sqlite3VdbeMemMakeWriteable(pNew)!=SQLITE_OK ){
sqlite3ValueFree(pNew);
pNew = 0;
}
pNew->flags &= ~(MEM_Static|MEM_Dyn);
pNew->flags |= MEM_Ephem;
if( sqlite3VdbeMemMakeWriteable(pNew)!=SQLITE_OK ){
sqlite3ValueFree(pNew);
pNew = 0;
}
}
return pNew;