]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
robustness fixes for preventing a finalized statement from being reused
authoradam <adam@noemail.net>
Tue, 19 Jan 2010 23:50:21 +0000 (23:50 +0000)
committeradam <adam@noemail.net>
Tue, 19 Jan 2010 23:50:21 +0000 (23:50 +0000)
FossilOrigin-Name: a7a0c8d644873764cb799f9d6aacede4a4fb531f

manifest
manifest.uuid
src/legacy.c
src/vdbeapi.c
src/vdbeaux.c

index 99484859a5586bdb52b3e8893729372631140ccb..180d43e43db2861e261771daf819787432370279 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,8 +1,5 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-C Update\sthe\sOS-X\sbranch\sto\sinclude\sall\strunk\schanges\sthrough\sversion\s3.6.22.
-D 2010-01-06T13:12:48
+C robustness\sfixes\sfor\spreventing\sa\sfinalized\sstatement\sfrom\sbeing\sreused
+D 2010-01-19T23:50:21
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in df768f5addf7b6da984aa279123d2671d716cf5c
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -132,7 +129,7 @@ F src/hash.h 2894c932d84d9f892d4b4023a75e501f83050970
 F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
 F src/insert.c f9c6098988675ac258b2f98ea5f7e370fc9990fa
 F src/journal.c b0ea6b70b532961118ab70301c00a33089f9315c
-F src/legacy.c 3c3f78cbe4ada0b17b208da1e2e2773d6a96f27d
+F src/legacy.c c9c8f267723fc458b02983994039a8c0b831a101
 F src/lempar.c 7f026423f4d71d989e719a743f98a1cbd4e6d99e
 F src/loadext.c 1c7a61ce1281041f437333f366a96aa0d29bb581
 F src/main.c 90176cc9163ed825e86ff021210f0ecc37aeed89
@@ -218,8 +215,8 @@ F src/vacuum.c db6415fd0f1be191e16228457a6deb9f232e6ad6
 F src/vdbe.c e05765736504d9dbcbb3dfa8964932780002ec39
 F src/vdbe.h bea1f0cd530775bdb58a340265f3cf3ee920e9b2
 F src/vdbeInt.h d7ea821ac7813c9bea0fe87558c35e07b2c7c44d
-F src/vdbeapi.c 2d8304acf89303a070a158937c13b9697a6721ab
-F src/vdbeaux.c 2e4a421bd3771ecd3b6c9a1c7abc7270a787a01b
+F src/vdbeapi.c adab93a7133e28b979ef63f5dcd5ca343954d085
+F src/vdbeaux.c 251147ba6268b673101b9fdacdd9277da37c12f4
 F src/vdbeblob.c 84f924700a7a889152aeebef77ca5f4e3875ffb4
 F src/vdbemem.c 1e16e3a16e55f4c3452834f0e041726021aa66e0
 F src/vdbetrace.c 864cef96919323482ebd9986f2132435115e9cc2
@@ -790,14 +787,9 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P a3204d8a217d47e5120ab16918c1b7d4be5a021e 077a6bee2dd4668a5b13c37aa7d4c052350ec782
-R 285e8b8dcdef148f0049020c6394997d
-U drh
-Z 386d9a9da91cf1df72706a198ddb2ae5
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.6 (GNU/Linux)
-
-iD8DBQFLRIxToxKgR168RlERAojmAJ9EzRc4OEWj0eJm08wIt5iNnckikgCfSAbn
-17IApgGE5dz73Fmj8EQ+3yU=
-=Saz1
------END PGP SIGNATURE-----
+P 541e2b488e4e40706e457c6d3b5647d53da02ce9
+R 478cd8c986e68696068e8d209931e4c5
+T *branch * apple-osx
+T *sym-apple-osx *
+U adam
+Z 1b45182e7b58bf478f36589a9bc5ada0
index 16eaa7e9bae71ae47023c7cf79803f0c9803de3e..59423fe564d3af1b44d6474ddc5841b0352320c4 100644 (file)
@@ -1 +1 @@
-541e2b488e4e40706e457c6d3b5647d53da02ce9
\ No newline at end of file
+a7a0c8d644873764cb799f9d6aacede4a4fb531f
\ No newline at end of file
index c95e0432fde1ffb9d85ba7a5bb490a92744679d7..b5e376f5daaa4a1ae535b4c667f80593b078febc 100644 (file)
@@ -44,6 +44,10 @@ int sqlite3_exec(
   int nRetry = 0;             /* Number of retry attempts */
   int callbackIsInit;         /* True if callback data is initialized */
 
+  if (!sqlite3SafetyCheckOk(db)) {
+    return SQLITE_MISUSE;
+  }
+       
   if( zSql==0 ) zSql = "";
 #ifdef SQLITE_ENABLE_SQLRR
   SRRecExec(db, zSql);
index 64d0e2cc53b27ac1eb6718e51171dadccb463b46..1f6b346f06cd33d70f5fdb05aa566d1155bd6e03 100644 (file)
@@ -53,6 +53,9 @@ int sqlite3_finalize(sqlite3_stmt *pStmt){
     SRRecFinalize(pStmt);
 #endif
     sqlite3 *db = v->db;
+    if( db==0 ){
+      return SQLITE_MISUSE;
+    }
 #if SQLITE_THREADSAFE
     sqlite3_mutex *mutex = v->db->mutex;
 #endif
@@ -414,10 +417,10 @@ end_of_step:
 */
 int sqlite3_step(sqlite3_stmt *pStmt){
   int rc = SQLITE_MISUSE;
-  if( pStmt ){
+  Vdbe *v = (Vdbe*)pStmt;
+  sqlite3 *db;
+  if( v && ((db = v->db) != NULL)){
     int cnt = 0;
-    Vdbe *v = (Vdbe*)pStmt;
-    sqlite3 *db = v->db;
 #ifdef SQLITE_ENABLE_SQLRR
     SRRecStep(pStmt);
 #endif
index d7c162524216db3522e9227f22a6f422cbfd2e41..967ffa7d69a491440e756ea108f9a0e1d10517a3 100644 (file)
@@ -66,7 +66,7 @@ void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, int isPrepareV2){
 */
 const char *sqlite3_sql(sqlite3_stmt *pStmt){
   Vdbe *p = (Vdbe *)pStmt;
-  return (p->isPrepareV2 ? p->zSql : 0);
+  return ((p && p->isPrepareV2) ? p->zSql : 0);
 }
 
 /*
@@ -2336,6 +2336,7 @@ void sqlite3VdbeDelete(Vdbe *p){
   sqlite3DbFree(db, p->zSql);
   p->magic = VDBE_MAGIC_DEAD;
   sqlite3DbFree(db, p->pFree);
+  p->db = NULL;
   sqlite3DbFree(db, p);
 }