]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Avoid a segfault that could occur when running the recover API on a database handle...
authordan <Dan Kennedy>
Mon, 31 Oct 2022 10:53:23 +0000 (10:53 +0000)
committerdan <Dan Kennedy>
Mon, 31 Oct 2022 10:53:23 +0000 (10:53 +0000)
FossilOrigin-Name: e02c697281a777c33070168af784b2d291397e488244a217620897f40aed7158

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

index 7c3b0a0eefd5fa0d824f5ef70757ebfaaf0e1e27..94bcd348a79d2bdb1c72aad28f0d6e9cd235b86a 100644 (file)
@@ -269,5 +269,14 @@ do_execsql_test 14.1 {
 }
 do_recover_test 14 
 
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 15.1 {
+  PRAGMA journal_mode=OFF;
+  PRAGMA mmap_size=10;
+  CREATE TABLE t1(x);
+} {off 10}
+do_recover_test 15 
+
 finish_test
 
index f18903f658ee91324e2762aaab91e91a99ab0299..022d03f50ba405000114ba7e582c76ca6b7ab0ea 100644 (file)
@@ -2161,6 +2161,8 @@ static int recoverVfsShmMap(sqlite3_file*, int, int, int, void volatile**);
 static int recoverVfsShmLock(sqlite3_file*, int offset, int n, int flags);
 static void recoverVfsShmBarrier(sqlite3_file*);
 static int recoverVfsShmUnmap(sqlite3_file*, int deleteFlag);
+static int recoverVfsFetch(sqlite3_file*, sqlite3_int64, int, void**);
+static int recoverVfsUnfetch(sqlite3_file *pFd, sqlite3_int64 iOff, void *p);
 
 static sqlite3_io_methods recover_methods = {
   2, /* iVersion */
@@ -2180,7 +2182,8 @@ static sqlite3_io_methods recover_methods = {
   recoverVfsShmLock,
   recoverVfsShmBarrier,
   recoverVfsShmUnmap,
-  0, 0
+  recoverVfsFetch,
+  recoverVfsUnfetch
 };
 
 static int recoverVfsClose(sqlite3_file *pFd){
@@ -2486,6 +2489,19 @@ static int recoverVfsShmUnmap(sqlite3_file *pFd, int deleteFlag){
   );
 }
 
+static int recoverVfsFetch(
+  sqlite3_file *pFd, 
+  sqlite3_int64 iOff, 
+  int iAmt, 
+  void **pp
+){
+  *pp = 0;
+  return SQLITE_OK;
+}
+static int recoverVfsUnfetch(sqlite3_file *pFd, sqlite3_int64 iOff, void *p){
+  return SQLITE_OK;
+}
+
 /*
 ** Install the VFS wrapper around the file-descriptor open on the input
 ** database for recover handle p. Mutex RECOVER_MUTEX_ID must be held
index 66b0442ca1689e832a89f511964f833e690df6e8..40e385cfd62f687b83beeefec33d2478382f1d49 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Extra\sOOM\scheck\sin\sshell_error_context()\sof\sthe\sCLI.\n[forum:/forumpost/5708841db0|forum\spost\s5708841db0].
-D 2022-10-31T01:22:38.233
+C Avoid\sa\ssegfault\sthat\scould\soccur\swhen\srunning\sthe\srecover\sAPI\son\sa\sdatabase\shandle\swith\smemory-mapping\senabled.
+D 2022-10-31T10:53:23.735
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -386,7 +386,7 @@ F ext/rbu/sqlite3rbu.c 8737cabdfbee84bb25a7851ecef8b1312be332761238da9be6ddb10c6
 F ext/rbu/sqlite3rbu.h 1dc88ab7bd32d0f15890ea08d23476c4198d3da3056985403991f8c9cd389812
 F ext/rbu/test_rbu.c 03f6f177096a5f822d68d8e4069ad8907fe572c62ff2d19b141f59742821828a
 F ext/recover/dbdata.c 3ae32f9b7f02a141889b9075beb87895a826d0fcf3b702b8251cbb0dd3c91a83
-F ext/recover/recover1.test e08dc7a0513eab9de33e7b8e2260b9538bedb57c9bd6fbb278f328d29a102827
+F ext/recover/recover1.test 522e2c3353734dbef9118f08e47209470e50308ba35ce818fed00b8e265aee44
 F ext/recover/recover_common.tcl 6679af7dffc858e345053a91c9b0a897595b4a13007aceffafca75304ccb137c
 F ext/recover/recoverclobber.test 294dcc894124ab4ca3a7b35766630742a3d25810fceac22220beb64f70a33a60
 F ext/recover/recovercorrupt.test 6540aae95e17398dd70b44518367fd56588c44962cb276d2623a0fedba9efe9e
@@ -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 ec7b6cddae10476312ff22c0a59d97d550fefba3e85fce3750f722d3520350f5
+F ext/recover/sqlite3recover.c 0b9962b4fb4f9af408e9a1a535bb77a0a89d871040e429909225d09c2285bc6a
 F ext/recover/sqlite3recover.h f698ccc94bd4da38761035415ad08c4549a408491ff9fd5f52d34d2214f64e36
 F ext/recover/test_recover.c 61ec931e47abca6b2210f46239cafd9f3060741605e3d3c45a7c7a53f63dd957
 F ext/repair/README.md 92f5e8aae749a4dae14f02eea8e1bb42d4db2b6ce5e83dbcdd6b1446997e0c15
@@ -2054,8 +2054,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 7660db2a2e9c4f3a6a9343d6929744ad0f4be6820976411f9080165491da59b7
-R 39f668d8fe2469c4ce02b92540fc594e
-U drh
-Z ccf68645ddf326b444fdf39a1dc53fe4
+P cb12ac5de17e677f089d7b0b46803efbd9a9178972ffb0454a8b557b06633658
+R 46019e96ebee7f43e27063daa1a45bd1
+U dan
+Z 31c01b86489219dc9c143f294c0c509f
 # Remove this line to create a well-formed Fossil manifest.
index 3fa01659b978ab448bb5be65b94eb0724884295c..37b316cefb69311046055de943467ac6776550b0 100644 (file)
@@ -1 +1 @@
-cb12ac5de17e677f089d7b0b46803efbd9a9178972ffb0454a8b557b06633658
\ No newline at end of file
+e02c697281a777c33070168af784b2d291397e488244a217620897f40aed7158
\ No newline at end of file