]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
In the zipfile extension, leave the catalog list in a consistent state when
authordrh <>
Wed, 3 May 2023 07:30:15 +0000 (07:30 +0000)
committerdrh <>
Wed, 3 May 2023 07:30:15 +0000 (07:30 +0000)
the last entry is removed from the list.
[forum:/info/f03f1e4c5a5c9959|forum post f03f1e4c5a5c9959].

FossilOrigin-Name: 1b489d008b7bda12f9bf92e246bc613ef61e9c74ace0652d6d088e5a6e0696f6

ext/misc/zipfile.c
manifest
manifest.uuid
test/zipfile.test

index 9b49fb4df67680b2238d01dc507090a7b991610d..4dbf80b197bcd08a3a766aacb6c4b30f2d1a17fd 100644 (file)
@@ -1537,9 +1537,19 @@ static u32 zipfileGetTime(sqlite3_value *pVal){
 */
 static void zipfileRemoveEntryFromList(ZipfileTab *pTab, ZipfileEntry *pOld){
   if( pOld ){
-    ZipfileEntry **pp;
-    for(pp=&pTab->pFirstEntry; (*pp)!=pOld; pp=&((*pp)->pNext));
-    *pp = (*pp)->pNext;
+    if( pTab->pFirstEntry==pOld ){
+      pTab->pFirstEntry = pOld->pNext;
+      if( pTab->pLastEntry==pOld ) pTab->pLastEntry = 0;
+    }else{
+      ZipfileEntry *p;
+      for(p=pTab->pFirstEntry; p; p=p->pNext){
+        if( p->pNext==pOld ){
+          p->pNext = pOld->pNext;
+          if( pTab->pLastEntry==pOld ) pTab->pLastEntry = p;
+          break;
+        }
+      }
+    }
     zipfileEntryFree(pOld);
   }
 }
index 2d1e258bf30979f9196842ae9b87669b5fee5082..58d4554269fb190277d94a482860543200c96e40 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C If\sthe\spage\ssize\sis\swrong\son\sthe\spage1\scontent\sinside\sa\sWAL\sfile,\sthen\nrunning\sVACUUM\scould\strigger\san\sassert().\s\sThis\scheck-in\schanges\sthat\sassert()\ninto\sa\sbranch\sthat\sreturns\sSQLITE_CORRUPT.\n[forum:/info/4ef9b37d74d2d2e8|Forum\spost\s4ef9b37d74d2d2e8]
-D 2023-05-03T06:48:08.354
+C In\sthe\szipfile\sextension,\sleave\sthe\scatalog\slist\sin\sa\sconsistent\sstate\swhen\nthe\slast\sentry\sis\sremoved\sfrom\sthe\slist.\n[forum:/info/f03f1e4c5a5c9959|forum\spost\sf03f1e4c5a5c9959].
+D 2023-05-03T07:30:15.720
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -325,7 +325,7 @@ F ext/misc/vfsstat.c 474d08efc697b8eba300082cb1eb74a5f0f3df31ed257db1cb07e72ab0e
 F ext/misc/vtablog.c 5538acd0c8ddaae372331bee11608d76973436b77d6a91e8635cfc9432fba5ae
 F ext/misc/vtshim.c 1976e6dd68dd0d64508c91a6dfab8e75f8aaf6cd
 F ext/misc/wholenumber.c a838d1bea913c514ff316c69695efbb49ea3b8cb37d22afc57f73b6b010b4546
-F ext/misc/zipfile.c b9d615e1d9af7577833861cfaa79b253aec0f26c89239c75af8c790d287d1d39
+F ext/misc/zipfile.c b1f36004c19fb5f949fb166fc4ab88e96a86f66629e9ddb4736a45b63fc3d553
 F ext/misc/zorder.c b0ff58fa643afa1d846786d51ea8d5c4b6b35aa0254ab5a82617db92f3adda64
 F ext/rbu/rbu.c 801450b24eaf14440d8fd20385aacc751d5c9d6123398df41b1b5aa804bf4ce8
 F ext/rbu/rbu1.test 25870dd7db7eb5597e2b4d6e29e7a7e095abf332660f67d89959552ce8f8f255
@@ -1960,7 +1960,7 @@ F test/writecrash.test f1da7f7adfe8d7f09ea79b42e5ca6dcc41102f27f8e334ad71539501d
 F test/zeroblob.test 7b74cefc7b281dfa2b07cd237987fbe94b4a2037a7771e9e83f2d5f608b1d99e
 F test/zeroblobfault.test 861d8191a0d944dfebb3cb4d2c5b4e46a5a119eaec5a63dd996c2389f8063441
 F test/zerodamage.test 9c41628db7e8d9e8a0181e59ea5f189df311a9f6ce99cc376dc461f66db6f8dc
-F test/zipfile.test 4178a2de98739e9adac41cb8f0be5553df060e470c846f51fdbed247117728a7
+F test/zipfile.test 416adb0ca9bb54f978fe2e77978b1b964ce5e1c0199f45e381caa771e9f8cfc1
 F test/zipfile2.test 9903388a602a3834189857a985106ff95c3bba6a3969e0134127df991889db5d
 F test/zipfilefault.test 44d4d7a7f7cca7521d569d7f71026b241d65a6b1757aa409c1a168827edbbc2c
 F tool/GetFile.cs 47852aa0d806fe47ed1ac5138bdce7f000fe87aaa7f28107d0cb1e26682aeb44
@@ -2068,8 +2068,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 d40fd5924adaa8d6b1dd6b9a4087f64d496cf60096ae11c9229c59309c0d4844
-R 826fae3d34ead7c2ffb03c3b65d82a91
+P 0512f82a2cde7447cb348d9fd620f39f2f0e359141903cde20f7ba30b5d34af3
+R 8cfba04673384b0fb1cde1779f791db9
 U drh
-Z 66e9580a8736455dc37accdb5840cb3e
+Z 5a77ab8977a542de14acdb51e815a500
 # Remove this line to create a well-formed Fossil manifest.
index af1af7ecb70c7d91bbe34e5c9a27a76f8b0cbe25..cdf71effe04a3b8cce787cfa38121bacfd038b17 100644 (file)
@@ -1 +1 @@
-0512f82a2cde7447cb348d9fd620f39f2f0e359141903cde20f7ba30b5d34af3
\ No newline at end of file
+1b489d008b7bda12f9bf92e246bc613ef61e9c74ace0652d6d088e5a6e0696f6
\ No newline at end of file
index 8b862ae84c3557f2e3a70925f9cf4c6dd61ab3e3..4d09e08b1c6c60a4173567418df159d18189dd71 100644 (file)
@@ -862,5 +862,26 @@ do_catchsql_test 18.1 {
   SELECT * FROM zipfile(NULL);
 } {1 {cannot open file: }}
 
+# 2023-05-03 https://sqlite.org/forum/info/f03f1e4c5a5c9959
+#
+do_test 19.1 {
+  sqlite3 db :memory:
+  load_static_extension db zipfile
+  forcedelete zipfile19.zip
+  db eval {
+    CREATE VIRTUAL TABLE t1 USING zipfile('zipfile19.zip');
+    INSERT INTO t1 DEFAULT VALUES;
+  }
+  db close
+  sqlite3 db :memory:
+  load_static_extension db zipfile
+  db eval {
+    CREATE VIRTUAL TABLE v0 USING zipfile('zipfile19.zip');
+    SAVEPOINT y;
+    DELETE FROM v0 WHERE 9;
+    INSERT INTO v0 DEFAULT VALUES;
+  }
+} {}
+forcedelete zipfile19.zip
 
 finish_test