mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-10 01:02:56 +03:00
Continuing work toward detecting and fixing shallow-copy misuse.
FossilOrigin-Name: d0342f4bb9d25dd1dba3957778faa993fb9cc81c
This commit is contained in:
28
manifest
28
manifest
@@ -1,8 +1,8 @@
|
|||||||
-----BEGIN PGP SIGNED MESSAGE-----
|
-----BEGIN PGP SIGNED MESSAGE-----
|
||||||
Hash: SHA1
|
Hash: SHA1
|
||||||
|
|
||||||
C Add\sassert()\sstatements\sthat\sfail\swhen\sa\sshallow\scopy\sis\saccessed\safter\sthe\noriginal\shas\sbeen\smodified.\s\sThese\sassert()\sstatements\sshould\sdetect\sthe\skinds\nof\ssubtle\sSCopy\sbugs\ssuch\sas\scaused\sthe\sfault\nin\sticket\s[b351d95f9cd5ef17e9d9dbae18f].
|
C Continuing\swork\stoward\sdetecting\sand\sfixing\sshallow-copy\smisuse.
|
||||||
D 2010-09-27T21:09:32
|
D 2010-09-28T00:25:59
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in c599a15d268b1db2aeadea19df2adc3bf2eb6bee
|
F Makefile.in c599a15d268b1db2aeadea19df2adc3bf2eb6bee
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -130,9 +130,9 @@ F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
|
|||||||
F src/ctime.c 4f3aadad62c6c9f0d4e5a96718516ac4e3c598df
|
F src/ctime.c 4f3aadad62c6c9f0d4e5a96718516ac4e3c598df
|
||||||
F src/date.c 5dd8448a0bfea8d31fb14cff487d0c06ff8c8b20
|
F src/date.c 5dd8448a0bfea8d31fb14cff487d0c06ff8c8b20
|
||||||
F src/delete.c 7ed8a8c8b5f748ece92df173d7e0f7810c899ebd
|
F src/delete.c 7ed8a8c8b5f748ece92df173d7e0f7810c899ebd
|
||||||
F src/expr.c d2ffe8ed8eed8208c3e550cfba98a2a301a64108
|
F src/expr.c e211e57c9667630971c285bb9b3e58a8986e8677
|
||||||
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
|
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
|
||||||
F src/fkey.c 58bbf52c6ddd3f64ca40a3230f9e548a83a5cb16
|
F src/fkey.c 17950a28f28b23e8ad3feaac5fc88c324d2f600a
|
||||||
F src/func.c caa6c5134106d95cced4db80ce3fdcdde4f6c8d4
|
F src/func.c caa6c5134106d95cced4db80ce3fdcdde4f6c8d4
|
||||||
F src/global.c 02335177cf6946fe5525c6f0755cf181140debf3
|
F src/global.c 02335177cf6946fe5525c6f0755cf181140debf3
|
||||||
F src/hash.c 458488dcc159c301b8e7686280ab209f1fb915af
|
F src/hash.c 458488dcc159c301b8e7686280ab209f1fb915af
|
||||||
@@ -228,13 +228,13 @@ F src/update.c 227e6cd512108b84f69421fc6c7aa1b83d60d6e0
|
|||||||
F src/utf.c 1baeeac91707a4df97ccc6141ec0f808278af685
|
F src/utf.c 1baeeac91707a4df97ccc6141ec0f808278af685
|
||||||
F src/util.c 5f5f4db4e799224713582bb49124827b16aa8e54
|
F src/util.c 5f5f4db4e799224713582bb49124827b16aa8e54
|
||||||
F src/vacuum.c 924bd1bcee2dfb05376f79845bd3b4cec7b54b2f
|
F src/vacuum.c 924bd1bcee2dfb05376f79845bd3b4cec7b54b2f
|
||||||
F src/vdbe.c 00f017d904614e0076d09e40668884a7c61e6899
|
F src/vdbe.c 56e4697a5f5f0fa874c5e4279e3debf2ed2cd4c8
|
||||||
F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2
|
F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2
|
||||||
F src/vdbeInt.h 7f4cf1b2b69bef3a432b1f23dfebef57275436b4
|
F src/vdbeInt.h 7f4cf1b2b69bef3a432b1f23dfebef57275436b4
|
||||||
F src/vdbeapi.c 14040ffad59a9961468a457754d30266e71ebb2d
|
F src/vdbeapi.c 14040ffad59a9961468a457754d30266e71ebb2d
|
||||||
F src/vdbeaux.c de0b06b11a25293e820a49159eca9f1c51a64716
|
F src/vdbeaux.c de0b06b11a25293e820a49159eca9f1c51a64716
|
||||||
F src/vdbeblob.c 258a6010ba7a82b72b327fb24c55790655689256
|
F src/vdbeblob.c 258a6010ba7a82b72b327fb24c55790655689256
|
||||||
F src/vdbemem.c 5005341c08018c9da8c6434e974a38944270b4d5
|
F src/vdbemem.c 8ff4f80a35d51f3690c191ec44778ef4bf949ac0
|
||||||
F src/vdbetrace.c 864cef96919323482ebd9986f2132435115e9cc2
|
F src/vdbetrace.c 864cef96919323482ebd9986f2132435115e9cc2
|
||||||
F src/vtab.c 0e8e0cb30dffb078367e843e84e37ef99236c7e4
|
F src/vtab.c 0e8e0cb30dffb078367e843e84e37ef99236c7e4
|
||||||
F src/wal.c 7081f148cb52b0cf2280e6384196402dc58130a3
|
F src/wal.c 7081f148cb52b0cf2280e6384196402dc58130a3
|
||||||
@@ -870,18 +870,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
|||||||
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
||||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||||
P 53f5cfe11516d0496c7760378b6305c3088d479f
|
P 8b8e1732e8410efd5f8e308c43abe521584e87a0
|
||||||
R e854b2c96b563f29f2e69ca897448670
|
R 6e7ffc38beed1359e7a9763da2484bfb
|
||||||
T *bgcolor * #ffc0d0
|
|
||||||
T *branch * bug-53f5cfe115
|
|
||||||
T *sym-bug-53f5cfe115 *
|
|
||||||
T -sym-trunk *
|
|
||||||
U drh
|
U drh
|
||||||
Z 17ce6c0da33f85f32ad716e4a4d31291
|
Z f8752ab05737fec30725df8f72240df9
|
||||||
-----BEGIN PGP SIGNATURE-----
|
-----BEGIN PGP SIGNATURE-----
|
||||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||||
|
|
||||||
iD8DBQFMoQgRoxKgR168RlERApEWAJ9n5vftkvf9G1CdiZ1ojeecdSsSuwCfRWzj
|
iD8DBQFMoTYaoxKgR168RlERAuAoAJwOk2B2UJoKqsTRac6+nfXRusJjSwCfTXtE
|
||||||
CY8hXCRBjuCdgYG8Cw1+YgE=
|
5iMBVntYhX3w248Zh7Tlk4Q=
|
||||||
=49Tg
|
=B2vQ
|
||||||
-----END PGP SIGNATURE-----
|
-----END PGP SIGNATURE-----
|
||||||
|
@@ -1 +1 @@
|
|||||||
8b8e1732e8410efd5f8e308c43abe521584e87a0
|
d0342f4bb9d25dd1dba3957778faa993fb9cc81c
|
12
src/expr.c
12
src/expr.c
@@ -2867,10 +2867,14 @@ int sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){
|
|||||||
int inReg;
|
int inReg;
|
||||||
|
|
||||||
assert( target>0 && target<=pParse->nMem );
|
assert( target>0 && target<=pParse->nMem );
|
||||||
inReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
|
if( pExpr && pExpr->op==TK_REGISTER ){
|
||||||
assert( pParse->pVdbe || pParse->db->mallocFailed );
|
sqlite3VdbeAddOp2(pParse->pVdbe, OP_Copy, pExpr->iTable, target);
|
||||||
if( inReg!=target && pParse->pVdbe ){
|
}else{
|
||||||
sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, inReg, target);
|
inReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
|
||||||
|
assert( pParse->pVdbe || pParse->db->mallocFailed );
|
||||||
|
if( inReg!=target && pParse->pVdbe ){
|
||||||
|
sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, inReg, target);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
@@ -380,7 +380,7 @@ static void fkLookupParent(
|
|||||||
sqlite3VdbeAddOp3(v, OP_OpenRead, iCur, pIdx->tnum, iDb);
|
sqlite3VdbeAddOp3(v, OP_OpenRead, iCur, pIdx->tnum, iDb);
|
||||||
sqlite3VdbeChangeP4(v, -1, (char*)pKey, P4_KEYINFO_HANDOFF);
|
sqlite3VdbeChangeP4(v, -1, (char*)pKey, P4_KEYINFO_HANDOFF);
|
||||||
for(i=0; i<nCol; i++){
|
for(i=0; i<nCol; i++){
|
||||||
sqlite3VdbeAddOp2(v, OP_SCopy, aiCol[i]+1+regData, regTemp+i);
|
sqlite3VdbeAddOp2(v, OP_Copy, aiCol[i]+1+regData, regTemp+i);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the parent table is the same as the child table, and we are about
|
/* If the parent table is the same as the child table, and we are about
|
||||||
|
10
src/vdbe.c
10
src/vdbe.c
@@ -1142,7 +1142,7 @@ case OP_ResultRow: {
|
|||||||
pMem = p->pResultSet = &aMem[pOp->p1];
|
pMem = p->pResultSet = &aMem[pOp->p1];
|
||||||
for(i=0; i<pOp->p2; i++){
|
for(i=0; i<pOp->p2; i++){
|
||||||
assert( memIsValid(&pMem[i]) );
|
assert( memIsValid(&pMem[i]) );
|
||||||
memAboutToChange(p, &pMem[i]);
|
Deephemeralize(&pMem[i]);
|
||||||
sqlite3VdbeMemNulTerminate(&pMem[i]);
|
sqlite3VdbeMemNulTerminate(&pMem[i]);
|
||||||
sqlite3VdbeMemStoreType(&pMem[i]);
|
sqlite3VdbeMemStoreType(&pMem[i]);
|
||||||
REGISTER_TRACE(pOp->p1+i, &pMem[i]);
|
REGISTER_TRACE(pOp->p1+i, &pMem[i]);
|
||||||
@@ -1368,6 +1368,9 @@ case OP_Function: {
|
|||||||
n = pOp->p5;
|
n = pOp->p5;
|
||||||
apVal = p->apArg;
|
apVal = p->apArg;
|
||||||
assert( apVal || n==0 );
|
assert( apVal || n==0 );
|
||||||
|
assert( pOp->p3>0 && pOp->p3<=p->nMem );
|
||||||
|
pOut = &aMem[pOp->p3];
|
||||||
|
memAboutToChange(p, pOut);
|
||||||
|
|
||||||
assert( n==0 || (pOp->p2>0 && pOp->p2+n<=p->nMem+1) );
|
assert( n==0 || (pOp->p2>0 && pOp->p2+n<=p->nMem+1) );
|
||||||
assert( pOp->p3<pOp->p2 || pOp->p3>=pOp->p2+n );
|
assert( pOp->p3<pOp->p2 || pOp->p3>=pOp->p2+n );
|
||||||
@@ -1375,7 +1378,7 @@ case OP_Function: {
|
|||||||
for(i=0; i<n; i++, pArg++){
|
for(i=0; i<n; i++, pArg++){
|
||||||
assert( memIsValid(pArg) );
|
assert( memIsValid(pArg) );
|
||||||
apVal[i] = pArg;
|
apVal[i] = pArg;
|
||||||
memAboutToChange(p, pArg);
|
Deephemeralize(pArg);
|
||||||
sqlite3VdbeMemStoreType(pArg);
|
sqlite3VdbeMemStoreType(pArg);
|
||||||
REGISTER_TRACE(pOp->p2+i, pArg);
|
REGISTER_TRACE(pOp->p2+i, pArg);
|
||||||
}
|
}
|
||||||
@@ -1389,9 +1392,6 @@ case OP_Function: {
|
|||||||
ctx.pFunc = ctx.pVdbeFunc->pFunc;
|
ctx.pFunc = ctx.pVdbeFunc->pFunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert( pOp->p3>0 && pOp->p3<=p->nMem );
|
|
||||||
pOut = &aMem[pOp->p3];
|
|
||||||
memAboutToChange(p, pOut);
|
|
||||||
ctx.s.flags = MEM_Null;
|
ctx.s.flags = MEM_Null;
|
||||||
ctx.s.db = db;
|
ctx.s.db = db;
|
||||||
ctx.s.xDel = 0;
|
ctx.s.xDel = 0;
|
||||||
|
@@ -132,6 +132,9 @@ int sqlite3VdbeMemMakeWriteable(Mem *pMem){
|
|||||||
pMem->z[pMem->n] = 0;
|
pMem->z[pMem->n] = 0;
|
||||||
pMem->z[pMem->n+1] = 0;
|
pMem->z[pMem->n+1] = 0;
|
||||||
pMem->flags |= MEM_Term;
|
pMem->flags |= MEM_Term;
|
||||||
|
#ifdef SQLITE_DEBUG
|
||||||
|
pMem->pScopyFrom = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
|
Reference in New Issue
Block a user