]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Ensure that the VFS wrapper in the recover extension does not attempt to invoke undef...
authordan <Dan Kennedy>
Thu, 27 Oct 2022 19:02:51 +0000 (19:02 +0000)
committerdan <Dan Kennedy>
Thu, 27 Oct 2022 19:02:51 +0000 (19:02 +0000)
FossilOrigin-Name: 347c575108bc8112613a02afda1247bdbed24c15def7eb412d0b27aba047715b

ext/recover/recovercorrupt2.test
ext/recover/sqlite3recover.c
manifest
manifest.uuid

index 1846eb64d085010876962c303d673404a05a0078..ef4bf5216a8860574bc632590a6e7f7207a0c633 100644 (file)
@@ -143,13 +143,27 @@ do_test 3.1 {
   $R finish
 } {}
 
-sqlite3 db2 test.db2
-do_execsql_test -db db2 3.2 {
-} {
-}
-do_execsql_test -db db2 3.3 {
-} {}
-db2 close
+#-------------------------------------------------------------------------
+#
+reset_db
+do_test 4.0 {
+  sqlite3 db {}
+  db deserialize [decode_hexdb {
+  .open --hexdb
+  | size 4096 pagesize 4096 filename crash-00f2d3627f1b43.db
+  | page 1 offset 0
+  |      0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00   SQLite format 3.
+  |     16: 00 01 01 02 00 40 20 20 01 00 ff 00 42 01 10 01   .....@  ....B...
+  |     32: ef 00 00 87 00 ff ff ff f0 01 01 10 ff ff 00 00   ................
+  | end crash-00f2d3627f1b43.db
+  .recover
+}]} {}
+
+do_test 4.1 {
+  set R [sqlite3_recover_init db main test.db2]
+  catch { $R run }
+  list [catch { $R finish } msg] $msg
+} {1 {unable to open database file}}
 
 finish_test
 
index db1a9fd4877740f269e129f44ee2ee08399d9a35..41aad842456569c5e993f5c50d54c8676c4b3ea1 100644 (file)
@@ -2498,8 +2498,10 @@ static void recoverInstallWrapper(sqlite3_recover *p){
   sqlite3_file_control(p->dbIn, p->zDb, SQLITE_FCNTL_FILE_POINTER, (void*)&pFd);
   assert( pFd==0 || pFd->pMethods!=&recover_methods );
   if( pFd ){
+    int iVersion = 1 + (pFd->pMethods->iVersion>1 && pFd->pMethods->xShmMap!=0);
     recover_g.pMethods = pFd->pMethods;
     recover_g.p = p;
+    recover_methods.iVersion = iVersion;
     pFd->pMethods = &recover_methods;
   }
 }
index 4ee7151f88e58c80c7b7f781f6e8d1adc0939fe1..4540f2893c5befdad54905c35d33efc3a1164203 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\san\sassert()\sfailure\sin\sthe\srecover\sextension\striggered\sby\sa\szero\svalue\sas\sthe\sfirst\spage-number\sin\san\soverflow\spage\schain.
-D 2022-10-27T18:35:09.479
+C Ensure\sthat\sthe\sVFS\swrapper\sin\sthe\srecover\sextension\sdoes\snot\sattempt\sto\sinvoke\sundefined\smethods\son\sthe\sunderlying\sVFS.
+D 2022-10-27T19:02:51.201
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -390,7 +390,7 @@ F ext/recover/recover1.test e08dc7a0513eab9de33e7b8e2260b9538bedb57c9bd6fbb278f3
 F ext/recover/recover_common.tcl 6679af7dffc858e345053a91c9b0a897595b4a13007aceffafca75304ccb137c
 F ext/recover/recoverclobber.test 294dcc894124ab4ca3a7b35766630742a3d25810fceac22220beb64f70a33a60
 F ext/recover/recovercorrupt.test 6540aae95e17398dd70b44518367fd56588c44962cb276d2623a0fedba9efe9e
-F ext/recover/recovercorrupt2.test aae5329bd5e773895ad426a72100b290c06cc855704c7c7561369ea03742b5f0
+F ext/recover/recovercorrupt2.test c1a703d1612ff7ad8c9c2b86036c195f06ffa5663aedd7f6314074cdb5a56b1f
 F ext/recover/recoverfault.test 3a0a32b9fc216592b97775d69220695b0926980c0f7424b7a59144e47d7cb568
 F ext/recover/recoverfault2.test 321036336af23e778a87f148c4cc4407f88fbdab1fd72ddb661669be9020d36b
 F ext/recover/recoverold.test 46e9d99b595fac583d4c67f74d7d89c20a435c752ef6eeb3e918b599940c88e0
@@ -398,7 +398,7 @@ F ext/recover/recoverpgsz.test 93e970eab05e4e89f8fd6b1bd23f9ec137ea09857e66ba0d4
 F ext/recover/recoverrowid.test 1694a1a5526d825f71279f3d02ab02a1ee4c5265de18858bf54cb8ec54487ac8
 F ext/recover/recoverslowidx.test f356bb9fba7ffd6fc50e045e419464f0129ac6e24decf6e919584f79c3493727
 F ext/recover/recoversql.test f9872ff2114e13ffd8ee31e1de06919f62b9b48bc080191b5bd076d10becb60f
-F ext/recover/sqlite3recover.c 157f5c9dc198feb1f78f4c902e6073430bd48f747953e2330a58493f4fa5bfcf
+F ext/recover/sqlite3recover.c 5f7ace27d8e69d350a20171f13ebe964f090906ff0a74eb0fb4582c391c44dc5
 F ext/recover/sqlite3recover.h f698ccc94bd4da38761035415ad08c4549a408491ff9fd5f52d34d2214f64e36
 F ext/recover/test_recover.c 61ec931e47abca6b2210f46239cafd9f3060741605e3d3c45a7c7a53f63dd957
 F ext/repair/README.md 92f5e8aae749a4dae14f02eea8e1bb42d4db2b6ce5e83dbcdd6b1446997e0c15
@@ -2052,8 +2052,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 9ecc9d25ea62a7777bbf621989a5c577b612784121a20465cda4d4023fa9634d
-R 3096a83bfa4b844f97735d498da01d52
+P 44c0874c33e76ce708022e5c38c74f75565a8cea9f4c5b067cc0a54079aeee20
+R 2a9f1c8744e1f06e55a5b9eca0aedd6c
 U dan
-Z ed22d20a006d2a515bbb5bbd662f21b3
+Z 2859b7a2df62a00c975fd7e3b56edbdb
 # Remove this line to create a well-formed Fossil manifest.
index 09daa9a1383eff9c32e757a1bc480d8521615863..10ccc61b4a6b4a8b1c98048b7c424cb0d5501968 100644 (file)
@@ -1 +1 @@
-44c0874c33e76ce708022e5c38c74f75565a8cea9f4c5b067cc0a54079aeee20
\ No newline at end of file
+347c575108bc8112613a02afda1247bdbed24c15def7eb412d0b27aba047715b
\ No newline at end of file