]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Do not allow constant factoring during PRAGMA integrity_check, since the
authordrh <>
Mon, 27 Mar 2023 13:24:02 +0000 (13:24 +0000)
committerdrh <>
Mon, 27 Mar 2023 13:24:02 +0000 (13:24 +0000)
constants might be stored in registers that are later reused for other
purposes.  dbsqlfuzz dc9ab26037cf5ef797d28cd1ae0855ade584216d.  Problem
discovered by a new assert() statement added in [6f8b97f31a4c8552].

FossilOrigin-Name: 0bba27b78112b2b2271e498f41c437df985aa2faab302ee5b29d9b60003a8379

manifest
manifest.uuid
src/pragma.c
test/pragma.test

index 4dc1905e935ff27e0f44dc55b31dede2cbdf3fda..fc6c84fa6d820ecada72b9061aadad548613decc 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Improvements\sto\sregister\sallocation,\sespecially\sin\sthe\sANALYZE\scommand.\nNew\sassert()\sstatements\sadded\sto\shelp\sverify\sthat\smemory\sallocation\sis\ncorrect,\sand\sto\shelp\sfuzzer\sfind\slingering\serrors.
-D 2023-03-26T16:36:27.642
+C Do\snot\sallow\sconstant\sfactoring\sduring\sPRAGMA\sintegrity_check,\ssince\sthe\nconstants\smight\sbe\sstored\sin\sregisters\sthat\sare\slater\sreused\sfor\sother\npurposes.\s\sdbsqlfuzz\sdc9ab26037cf5ef797d28cd1ae0855ade584216d.\s\sProblem\ndiscovered\sby\sa\snew\sassert()\sstatement\sadded\sin\s[6f8b97f31a4c8552].
+D 2023-03-27T13:24:02.826
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -618,7 +618,7 @@ F src/parse.y 424e49ed8fc6c907920db9be5a13a75ed43811e1ea8dd21b0fa9ef97f083dc6b
 F src/pcache.c 842410539b544e12d5fccfcf29890782f46a58f227a77bc0bd76243799662c0c
 F src/pcache.h 1497ce1b823cf00094bb0cf3bac37b345937e6f910890c626b16512316d3abf5
 F src/pcache1.c dee95e3cd2b61e6512dc814c5ab76d5eb36f0bfc9441dbb4260fccc0d12bbddc
-F src/pragma.c 20103b19d91551a673e5a35bd41a830b3d1bf2929174825cf6148430562c4533
+F src/pragma.c 367652f5374b2f17761c96b262d9534d89bf089572a1ebba70d426a138c6802a
 F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7
 F src/prepare.c ce87a08cfddd45a147150db34190b1986f2d4a0e0828858cb6bd908c78fb02e3
 F src/printf.c 7eac1a9896a80697e03e08963e210830532ae2ff610e16c193e95af007ca5623
@@ -1379,7 +1379,7 @@ F test/pendingrace.test cbdf0f74bc939fb43cebad64dda7a0b5a3941a10b7e9cc2b596ff3e4
 F test/percentile.test 4243af26b8f3f4555abe166f723715a1f74c77ff
 F test/permutations.test 8bd6b6db541e2a7f9bb894be99ef5c00526b23762c4a00c574e1cba697495125
 F test/pg_common.tcl 3b27542224db1e713ae387459b5d117c836a5f6e328846922993b6d2b7640d9f
-F test/pragma.test aeefa47ba5ebbf4ffc6addc223568d2a95dc7ec3ba3e3c4a26b199e805f94514
+F test/pragma.test d21ae02249f2a1813f016efebe616a1916b3f9abd71867da6211a50bfea373ba
 F test/pragma2.test e5d5c176360c321344249354c0c16aec46214c9f
 F test/pragma3.test 92a46bbea12322dd94a404f49edcfbfc913a2c98115f0d030a7459bb4712ef31
 F test/pragma4.test ca5e4dfc46adfe490f75d73734f70349d95a199e6510973899e502eef2c8b1f8
@@ -2051,8 +2051,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 c3967d1259f1df969d303394986960bd098e174dcd337e374c9c3c39e0efa466
-R 83f2cb26cda25754a99646b5b49c48f5
+P 6f8b97f31a4c8552312b4c98432ea356ae54c06d9cc929969f50c3c88360cd7b
+R da63f53a7775f8aca8c00c917e70bb9d
 U drh
-Z e8ea09f6c5d7f65fd4a1a44c0da01723
+Z f3c893e6519a38082584c0ff29f6d8de
 # Remove this line to create a well-formed Fossil manifest.
index cde71f34772ab100a3c08049ee9c1b6dcfbae918..2a932831a6968a7cad9f63ec9b7ec6d5f09eeef7 100644 (file)
@@ -1 +1 @@
-6f8b97f31a4c8552312b4c98432ea356ae54c06d9cc929969f50c3c88360cd7b
\ No newline at end of file
+0bba27b78112b2b2271e498f41c437df985aa2faab302ee5b29d9b60003a8379
\ No newline at end of file
index 4686adfad57ea8ca0ad646e495c02cacd2367d7a..4138752455892bdaa17da1a4b4189f9c8d170954 100644 (file)
@@ -1694,6 +1694,7 @@ void sqlite3Pragma(
       if( iDb>=0 && i!=iDb ) continue;
 
       sqlite3CodeVerifySchema(pParse, i);
+      pParse->okConstFactor = 0;  /* tag-20230327-1 */
 
       /* Do an integrity check of the B-Tree
       **
index 9ab332c3f14c8ef68c8ea7699360df3bcdb25fbf..a3e1d3cd65eafbc53fab59a7a8b8fb7bd8f7c64d 100644 (file)
@@ -2060,4 +2060,17 @@ ifcapable !has_codec {
   } {0 {{database disk image is malformed}}}
 }  
 database_never_corrupt
+
+# 2023-03-27.  Register allocation issue in integrity_check discovered
+# by new assert() statements added in [6f8b97f31a4c8552].
+# dbsqlfuzz dc9ab26037cf5ef797d28cd1ae0855ade584216d
+# tag-20230327-1
+#
+reset_db
+do_execsql_test 25.0 {
+  CREATE TABLE t1(a INT, b AS (a*2) NOT NULL);
+  CREATE TEMP TABLE t2(a PRIMARY KEY, b, c UNIQUE) WITHOUT ROWID;
+  CREATE UNIQUE INDEX t2x ON t2(c,b);
+  PRAGMA integrity_check;
+} ok
 finish_test