]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Avoid dropping error codes in the xBegin() method of virtual table sqlite_dbpage.
authordan <Dan Kennedy>
Wed, 6 Jul 2022 13:59:45 +0000 (13:59 +0000)
committerdan <Dan Kennedy>
Wed, 6 Jul 2022 13:59:45 +0000 (13:59 +0000)
FossilOrigin-Name: 570e2bce595d3a48977dca0bb573dd3fe745a0d13b7122b3ad8ab4745c0700d0

manifest
manifest.uuid
src/dbpage.c
test/dbpagefault.test [new file with mode: 0644]

index 3aa81277964991c0677fec3c50b65e9368b669fe..3e17c90a1bb4b35393c4c4615c357e3877f42447 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sfor\sbuilds\swith\sboth\sSQLITE_DEBUG\sand\sSQLITE_OMIT_WINDOWFUNC\sdefined.
-D 2022-07-05T19:53:59.705
+C Avoid\sdropping\serror\scodes\sin\sthe\sxBegin()\smethod\sof\svirtual\stable\ssqlite_dbpage.
+D 2022-07-06T13:59:45.908
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -518,7 +518,7 @@ F src/callback.c 4c19af69835787bfe790ac560f3071a824eb629f34e41f97b52ce5235c77de1
 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
 F src/ctime.c 026dbdcdbd8c3cde98a88483ee88310ff43150ab164ad768f12cc700a11495ad
 F src/date.c 15082566229d4b1e5f24fdb490bf9bcc68824b911d70e3573ef075a1b9e2d26f
-F src/dbpage.c 90661a87e1db8bfbc8d2ebbdcd3749651ddb287c555c07a28fb17c7c591ffb68
+F src/dbpage.c 5808e91bc27fa3981b028000f8fadfdc10ce9e59a34ce7dc4e035a69be3906ec
 F src/dbstat.c 861e08690fcb0f2ee1165eff0060ea8d4f3e2ea10f80dab7d32ad70443a6ff2d
 F src/delete.c a8e844af211a48b13b5b358be77a12c860c6a557c21990ad51a548e2536500ce
 F src/expr.c 4907afcb86d72b5525d8767515ce425ec53c7a2d3664441b46cef5b376ee0cba
@@ -867,6 +867,7 @@ F test/dbfuzz001.test 55e1a3504f8dea84155e09912fe3b1c3ad77e0b1a938ec42ca03b8e51b
 F test/dbfuzz2-seed1.db e6225c6f3d7b63f9c5b6867146a5f329d997ab105bee64644dc2b3a2f2aebaee
 F test/dbfuzz2.c 4b3c12de4d98b1b2d908ab03d217d4619e47c8b23d5e67f8a6f2b1bdee7cae23
 F test/dbpage.test fce29035c7566fd7835ec0f19422cb4b9c6944ce0e1b936ff8452443f92e887d
+F test/dbpagefault.test e917cd250018b836e8d7d1a659c63bcd25737a8f31f15925b891b8f92247fdf9
 F test/dbstatus.test 4a4221a883025ffd39696b3d1b3910b928fb097d77e671351acb35f3aed42759
 F test/dbstatus2.test f5fe0afed3fa45e57cfa70d1147606c20d2ba23feac78e9a172f2fe8ab5b78ef
 F test/decimal.test fcf403fd5585f47342234e153c4a4338cd737b8e0884ac66fc484df47dbcf1a7
@@ -1978,8 +1979,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P b12ddabf07b5e06bcee8dda3f990af3a131ab52b8fa969ba061b26d38458f31d
-R 181929b813c3d31abfcc4b23a70a4427
+P 77916947ce3f0828e1c50bcb8a6438c951ab9e74d83ec4324e82e90e100b9a98
+R e13916bae86c24145a230aedfd5b02fd
 U dan
-Z 61209a94126e8e0bbb9b2674f8f16b4a
+Z 3a52626dc6b0f09ba85ace5a67f4f7d5
 # Remove this line to create a well-formed Fossil manifest.
index d7cce482139ed7c16a9b3d2f8e7424f360d316a5..0ee36647a2797ce082a1a5d711482bf84392f02f 100644 (file)
@@ -1 +1 @@
-77916947ce3f0828e1c50bcb8a6438c951ab9e74d83ec4324e82e90e100b9a98
\ No newline at end of file
+570e2bce595d3a48977dca0bb573dd3fe745a0d13b7122b3ad8ab4745c0700d0
\ No newline at end of file
index 003997b95f3493208eb172d754ca84af66dcf053..9b565177c54b465f93bfff08bd4142e84508d950 100644 (file)
@@ -372,11 +372,12 @@ static int dbpageBegin(sqlite3_vtab *pVtab){
   DbpageTable *pTab = (DbpageTable *)pVtab;
   sqlite3 *db = pTab->db;
   int i;
-  for(i=0; i<db->nDb; i++){
+  int rc = SQLITE_OK;
+  for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
     Btree *pBt = db->aDb[i].pBt;
-    if( pBt ) sqlite3BtreeBeginTrans(pBt, 1, 0);
+    if( pBt ) rc = sqlite3BtreeBeginTrans(pBt, 1, 0);
   }
-  return SQLITE_OK;
+  return rc;
 }
 
 
diff --git a/test/dbpagefault.test b/test/dbpagefault.test
new file mode 100644 (file)
index 0000000..550a567
--- /dev/null
@@ -0,0 +1,52 @@
+# 2022 July 06
+#
+# The author disclaims copyright to this source code.  In place of
+# a legal notice, here is a blessing:
+#
+#    May you do good and not evil.
+#    May you find forgiveness for yourself and forgive others.
+#    May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+source $testdir/lock_common.tcl
+source $testdir/malloc_common.tcl
+
+if {[permutation] == "inmemory_journal"} {
+  finish_test
+  return
+}
+
+set testprefix dbpagefault
+
+
+faultsim_save_and_close
+do_faultsim_test 1 -prep {
+  faultsim_restore_and_reopen
+  execsql { ATTACH 'test.db2' AS aux; }
+} -body {
+  execsql { 
+    CREATE VIRTUAL TABLE t1 USING sqlite_dbpage();
+  }
+} -test {
+  execsql { PRAGMA journal_mode = off }
+  faultsim_test_result {0 {}} 
+}
+
+do_faultsim_test 2 -prep {
+  sqlite3 db "xyz.db" -vfs memdb
+  execsql { ATTACH 'test.db2' AS aux; }
+} -body {
+  execsql { 
+    CREATE VIRTUAL TABLE t1 USING sqlite_dbpage();
+    INSERT INTO t1 DEFAULT VALUES;
+  }
+} -test {
+  execsql { PRAGMA journal_mode = off }
+  faultsim_test_result {1 {no such schema}}  {1 {SQL logic error}}
+}
+
+finish_test