]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add new defenses against misuse of the C API. Ticket #870. (CVS 1906)
authordrh <drh@noemail.net>
Sat, 28 Aug 2004 14:49:46 +0000 (14:49 +0000)
committerdrh <drh@noemail.net>
Sat, 28 Aug 2004 14:49:46 +0000 (14:49 +0000)
FossilOrigin-Name: 6ef1f662d71c75bdb7f61b2fff03f5b1b41e5586

manifest
manifest.uuid
src/main.c
src/vdbeapi.c

index 5acf1ef9965ebda9dbb3818d2b695dd510267195..144ce30b5e1fbdcedbd289c81527a5bc9fe69f68 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\ssqlite_temp_directory\sto\sthe\swindows\sdriver.\s(CVS\s1905)
-D 2004-08-28T01:12:57
+C Add\snew\sdefenses\sagainst\smisuse\sof\sthe\sC\sAPI.\s\sTicket\s#870.\s(CVS\s1906)
+D 2004-08-28T14:49:47
 F Makefile.in 4a5e570a9e2d35b09c31b3cf01b78cea764ade4b
 F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@@ -39,7 +39,7 @@ F src/hash.c a97721a55440b7bea31ffe471bb2f6b4123cddd5
 F src/hash.h 1b0c445e1c89ff2aaad9b4605ba61375af001e84
 F src/insert.c fc1ce65a0fe68f226143de9b43c3582164a92aff
 F src/legacy.c 2f3617c61bcdcd1d776154a9cfebf99facda8ad8
-F src/main.c 581ccf00909842d05c42ce02bb19b92859f447db
+F src/main.c c00e3f9e8c4fa9bc0fdad43ce366958db73ac9c6
 F src/md5.c 7ae1c39044b95de2f62e066f47bb1deb880a1070
 F src/os.h d1780e0db95cad01f213d48da22ab490eb4fd345
 F src/os_common.h cd7eb025fdab7dc91e0e97bf6310f1648205857f
@@ -77,7 +77,7 @@ F src/vacuum.c 9978a5760c2c430bc5b5e66505a02dad76f25813
 F src/vdbe.c ea662188cc489934a567d1eaa3fb6754d5b92b7d
 F src/vdbe.h e081c72cd0f7c19d49b1927460aeefcf0fbc85ac
 F src/vdbeInt.h 16322cbfccf0b05631fcf0df68b115c46584d6c9
-F src/vdbeapi.c e20e646a0ec4e74934bfcb82bd0fbb3c3c4a21f7
+F src/vdbeapi.c 854732720c2cfc6ff76b28eef6253ac84a5408bc
 F src/vdbeaux.c 022c484dba235d2dcbb1faca0f1943702f4232ed
 F src/vdbemem.c 68fefaf83adb48fe44135da01502c9327f6172b0
 F src/where.c a84eee276cd072158224da6b5f30733df2d56027
@@ -243,7 +243,7 @@ F www/tclsqlite.tcl 560ecd6a916b320e59f2917317398f3d59b7cc25
 F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9
 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
-P b3b9e58103dd6c65c55caf9a25bc1c257b37df88
-R af741a99488fdab1ea07d8dfec296d71
+P f5b0e5b0b2f17d179c23c7e4542dbbb452096056
+R 19adc0034f3d181b6cae6f1ebdba626d
 U drh
-Z f2d1ace11f29f4f151b3075cb095a708
+Z 8b14a526a7800c9ee03abeba359d39e9
index df6f5f73dd2b2d6a1c5f6ab83ee423b2ddb7e996..7e2b3ecb0d316d96b5837a9e42b0283144b38e6f 100644 (file)
@@ -1 +1 @@
-f5b0e5b0b2f17d179c23c7e4542dbbb452096056
\ No newline at end of file
+6ef1f662d71c75bdb7f61b2fff03f5b1b41e5586
\ No newline at end of file
index 35b9c387d2ae254f934d333c0c66380634d0e5cd..85ba6dc6bf380259a1693829fbe93c8eb2169dd0 100644 (file)
@@ -14,7 +14,7 @@
 ** other files are for internal use by SQLite and should not be
 ** accessed by users of the library.
 **
-** $Id: main.c,v 1.253 2004/08/21 17:54:45 drh Exp $
+** $Id: main.c,v 1.254 2004/08/28 14:49:47 drh Exp $
 */
 #include "sqliteInt.h"
 #include "os.h"
@@ -1240,7 +1240,13 @@ int sqlite3_open16(
 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
 */
 int sqlite3_finalize(sqlite3_stmt *pStmt){
-  return pStmt ? sqlite3VdbeFinalize((Vdbe*)pStmt) : SQLITE_OK;
+  int rc;
+  if( pStmt==0 ){
+    rc = SQLITE_OK;
+  }else{
+    rc = sqlite3VdbeFinalize((Vdbe*)pStmt);
+  }
+  return rc;
 }
 
 /*
@@ -1252,8 +1258,13 @@ int sqlite3_finalize(sqlite3_stmt *pStmt){
 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
 */
 int sqlite3_reset(sqlite3_stmt *pStmt){
-  int rc = sqlite3VdbeReset((Vdbe*)pStmt);
-  sqlite3VdbeMakeReady((Vdbe*)pStmt, -1, 0, 0, 0);
+  int rc;
+  if( pStmt==0 ){
+    rc = SQLITE_OK;
+  }else{
+    rc = sqlite3VdbeReset((Vdbe*)pStmt);
+    sqlite3VdbeMakeReady((Vdbe*)pStmt, -1, 0, 0, 0);
+  }
   return rc;
 }
 
index b955190aec958330b34e1b4481af8064dcca9884..1909c142e7144f90f3595efb56fcc13da6341fab 100644 (file)
@@ -138,7 +138,7 @@ int sqlite3_step(sqlite3_stmt *pStmt){
   sqlite *db;
   int rc;
 
-  if( p->magic!=VDBE_MAGIC_RUN ){
+  if( p==0 || p->magic!=VDBE_MAGIC_RUN ){
     return SQLITE_MISUSE;
   }
   if( p->aborted ){
@@ -262,7 +262,7 @@ int sqlite3_aggregate_count(sqlite3_context *p){
 */
 int sqlite3_column_count(sqlite3_stmt *pStmt){
   Vdbe *pVm = (Vdbe *)pStmt;
-  return pVm->nResColumn;
+  return pVm ? pVm->nResColumn : 0;
 }
 
 /*
@@ -271,7 +271,7 @@ int sqlite3_column_count(sqlite3_stmt *pStmt){
 */
 int sqlite3_data_count(sqlite3_stmt *pStmt){
   Vdbe *pVm = (Vdbe *)pStmt;
-  if( !pVm->resOnStack ) return 0;
+  if( pVm==0 || !pVm->resOnStack ) return 0;
   return pVm->nResColumn;
 }
 
@@ -405,7 +405,7 @@ const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
 */
 static int vdbeUnbind(Vdbe *p, int i){
   Mem *pVar;
-  if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
+  if( p==0 || p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
     sqlite3Error(p->db, SQLITE_MISUSE, 0);
     return SQLITE_MISUSE;
   }