]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix sqlite3rbu_close() so that the pzErrmsg parameter may be passed NULL.
authordan <dan@noemail.net>
Tue, 13 Jun 2017 16:52:34 +0000 (16:52 +0000)
committerdan <dan@noemail.net>
Tue, 13 Jun 2017 16:52:34 +0000 (16:52 +0000)
FossilOrigin-Name: c433672dd8ab625628bde2f4f40a2dc000ed915dbe91833d3f753d8ab51baf25

ext/rbu/rbuvacuum.test
ext/rbu/sqlite3rbu.c
ext/rbu/sqlite3rbu.h
ext/rbu/test_rbu.c
manifest
manifest.uuid

index 86f4aa770e6235d94c263b5ad81731dea9388ac0..dba0ef37e0d72b6b75336a745e181aa0802c6b33 100644 (file)
@@ -298,6 +298,14 @@ do_test 2.1.2 {
   list [catch { rbu close } msg] $msg
 } {1 {SQLITE_ERROR - cannot vacuum wal mode database}}
 
+do_test 2.1.3 {
+  sqlite3rbu_vacuum rbu test.db state.db
+  rbu step
+} {SQLITE_ERROR}
+do_test 2.1.4 {
+  list [catch { rbu close_no_error } msg] $msg
+} {1 SQLITE_ERROR}
+
 reset_db
 do_execsql_test 2.2.0 {
   CREATE TABLE tx(a PRIMARY KEY, b BLOB);
index 7dd232b4b56c5aa52b82cd39d8c580fa444ce085..e0f413f021d4ff7b8134cf634cb5b53997412218 100644 (file)
@@ -3787,7 +3787,11 @@ int sqlite3rbu_close(sqlite3rbu *p, char **pzErrmsg){
 
     rbuEditErrmsg(p);
     rc = p->rc;
-    *pzErrmsg = p->zErrmsg;
+    if( pzErrmsg ){
+      *pzErrmsg = p->zErrmsg;
+    }else{
+      sqlite3_free(p->zErrmsg);
+    }
     sqlite3_free(p->zState);
     sqlite3_free(p);
   }else{
index 12112c14e191f068b9bad140a073b0395f7381a5..e55fe4685dc32899ae5ff3bb65cb5ea0bb864184 100644 (file)
@@ -420,10 +420,10 @@ int sqlite3rbu_savestate(sqlite3rbu *pRbu);
 **
 ** If an error has already occurred as part of an sqlite3rbu_step()
 ** or sqlite3rbu_open() call, or if one occurs within this function, an
-** SQLite error code is returned. Additionally, *pzErrmsg may be set to
-** point to a buffer containing a utf-8 formatted English language error
-** message. It is the responsibility of the caller to eventually free any 
-** such buffer using sqlite3_free().
+** SQLite error code is returned. Additionally, if pzErrmsg is not NULL,
+** *pzErrmsg may be set to point to a buffer containing a utf-8 formatted
+** English language error message. It is the responsibility of the caller to
+** eventually free any such buffer using sqlite3_free().
 **
 ** Otherwise, if no error occurs, this function returns SQLITE_OK if the
 ** update has been partially applied, or SQLITE_DONE if it has been 
index b1a2252741ee0ff2d4e11383cf2c9a1c0ed7683e..fba90dcdc40e5ad71451f409699f155237f24e41 100644 (file)
@@ -78,6 +78,7 @@ static int SQLITE_TCLAPI test_sqlite3rbu_cmd(
     {"db", 3, "RBU"},             /* 6 */
     {"state", 2, ""},             /* 7 */
     {"progress", 2, ""},          /* 8 */
+    {"close_no_error", 2, ""},    /* 9 */
     {0,0,0}
   };
   int iCmd;
@@ -102,11 +103,16 @@ static int SQLITE_TCLAPI test_sqlite3rbu_cmd(
       break;
     }
 
+    case 9: /* close_no_error */ 
     case 1: /* close */ {
       char *zErrmsg = 0;
       int rc;
       Tcl_DeleteCommand(interp, Tcl_GetString(objv[0]));
-      rc = sqlite3rbu_close(pRbu, &zErrmsg);
+      if( iCmd==1 ){
+        rc = sqlite3rbu_close(pRbu, &zErrmsg);
+      }else{
+        rc = sqlite3rbu_close(pRbu, 0);
+      }
       if( rc==SQLITE_OK || rc==SQLITE_DONE ){
         Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3ErrName(rc), -1));
         assert( zErrmsg==0 );
index 376e64ba53f7392b1e3635ee360d27a219cca23e..8d1aada1f45d2ed01bf7d61428bf91c6907a8c87 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sthe\sprocessing\sof\sdouble-negatives\sin\sWHERE\sclause\sconstraints\swith\nSTAT4.\s\sTicket\s[cfa2c908f2182]
-D 2017-06-13T04:31:54.016
+C Fix\ssqlite3rbu_close()\sso\sthat\sthe\spzErrmsg\sparameter\smay\sbe\spassed\sNULL.
+D 2017-06-13T16:52:34.629
 F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 8eeb80162074004e906b53d7340a12a14c471a83743aab975947e95ce061efcc
@@ -268,11 +268,11 @@ F ext/rbu/rbufts.test 828cd689da825f0a7b7c53ffc1f6f7fdb6fa5bda
 F ext/rbu/rbuprogress.test 1849d4e0e50616edf5ce75ce7db86622e656b5cf
 F ext/rbu/rburesume.test 8acb77f4a422ff55acfcfc9cc15a5cb210b1de83
 F ext/rbu/rbusave.test 0f43b6686084f426ddd040b878426452fd2c2f48
-F ext/rbu/rbuvacuum.test 4a977447c15c2581ab668781d9ef4294382530e0
+F ext/rbu/rbuvacuum.test ff357e9b556ca7ad4673da0ff7f244def919ff858e0f9f350d3e30fdd83a62a8
 F ext/rbu/rbuvacuum2.test 2074ab14fe66e1c7e7210c62562650dcd215bbaa
-F ext/rbu/sqlite3rbu.c 2a89efba9eeba8e6c89a498dc195e8efbdde2694
-F ext/rbu/sqlite3rbu.h 6fb6294c34a9ca93b5894a33bca530c6f08decba
-F ext/rbu/test_rbu.c 5aa22616afac6f71ebd3d9bc9bf1006cfabcca88
+F ext/rbu/sqlite3rbu.c d1438580a451eebda3bfd42ef69b677512f00125285e0e4e789b6131a45f6dd8
+F ext/rbu/sqlite3rbu.h fc25e1fcd99b5c6d32b1b5b1c73122632e873ac89bd0be9bf646db362b7ce02c
+F ext/rbu/test_rbu.c ec18cfc69a104309df23c359e3c80306c9a6bdd1d2c53c8b70ae158e9832dcd6
 F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761
 F ext/rtree/rtree.c 8205d6e4466f766e57ce1b8aa38224ac9e1cec2d2bf4684cd1cc5a6ddf9b7014
 F ext/rtree/rtree.h 834dbcb82dc85b2481cde6a07cdadfddc99e9b9e
@@ -1582,7 +1582,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 0bbdaf2801e4102d952db65e53962e534b67b8b72e76fadb4ce404a6249129d9
-R f2f95fcabff93258ae6c63b2d0970c78
-U drh
-Z 010cf979d0ebcfd760d21c84533c2792
+P 35b34bdf0843b49be39e13ed212e918c2d45afdb8374b5cd02ba6d2d5b16b3b9
+R 58bee221956dd673cf4d01eef24c120c
+U dan
+Z 30654fd7d5ea417a1e606ee3f07ebb27
index 2adbdfe579b41a8e9158a0e125e108786c495b75..02ab3583d2549982f74117ae69fdd5470176b72a 100644 (file)
@@ -1 +1 @@
-35b34bdf0843b49be39e13ed212e918c2d45afdb8374b5cd02ba6d2d5b16b3b9
\ No newline at end of file
+c433672dd8ab625628bde2f4f40a2dc000ed915dbe91833d3f753d8ab51baf25
\ No newline at end of file