]> 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:27:25 +0000 (13:27 +0000)
committerdrh <>
Mon, 27 Mar 2023 13:27:25 +0000 (13:27 +0000)
constants might be stored in registers that are later reused for other
purposes.

FossilOrigin-Name: a4b5f499d9429ca219c1a706b4767e528a2baf7ddb45bde9d01a4ce5f15cbb0f

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

index f4014691b7d58a634deb613014cf888fde228ec0..15d7b6660b0846ba878a9125caeed9b5b56854b8 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-27T13:10:43.014
+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.
+D 2023-03-27T13:27:25.639
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -614,7 +614,7 @@ F src/parse.y 960d2da92a23f8ba2ca22748a51bd75ee2c575564f2cbc59f119640e7f5b4c5d
 F src/pcache.c 842410539b544e12d5fccfcf29890782f46a58f227a77bc0bd76243799662c0c
 F src/pcache.h 1497ce1b823cf00094bb0cf3bac37b345937e6f910890c626b16512316d3abf5
 F src/pcache1.c dee95e3cd2b61e6512dc814c5ab76d5eb36f0bfc9441dbb4260fccc0d12bbddc
-F src/pragma.c a6f721ae2b1a7d93a97270b1fb1550d8f4818f414c92bf5d3e16a35f3b92bb20
+F src/pragma.c acec1c96eae560ac333d0446713903cee3214d4340e1f2705c0551054f1201d1
 F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7
 F src/prepare.c ce87a08cfddd45a147150db34190b1986f2d4a0e0828858cb6bd908c78fb02e3
 F src/printf.c ff4b05e38bf928ff1b80d3dda4f977b10fe39ecbfe69c018224c7e5594fb2455
@@ -1374,7 +1374,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
@@ -2045,9 +2045,9 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P c51df77ebe5046fdcbd6b45990ba0eb295486a4ce12a1d47d0cacc8ec3310024
-Q +6f8b97f31a4c8552312b4c98432ea356ae54c06d9cc929969f50c3c88360cd7b
-R b967f4cfe5e20f2be7fd6edb9e8fba82
+P 636f6fad8d4cf7238ed2281d6c3c29736663935ff58709a783a50bc0289d40f4
+Q +0bba27b78112b2b2271e498f41c437df985aa2faab302ee5b29d9b60003a8379
+R 2395e95d2389c8ef2cc081fe4cb2f951
 U drh
-Z 31b11df2feeb97af503570cf43aa658a
+Z 23c6255513149a9e6277371e6bd28100
 # Remove this line to create a well-formed Fossil manifest.
index 8cc72c31a73945a49379def50024c7754c288ad0..65ac256583713397e8200d18c35ecc47cfd391f8 100644 (file)
@@ -1 +1 @@
-636f6fad8d4cf7238ed2281d6c3c29736663935ff58709a783a50bc0289d40f4
\ No newline at end of file
+a4b5f499d9429ca219c1a706b4767e528a2baf7ddb45bde9d01a4ce5f15cbb0f
\ No newline at end of file
index a560a4a64be93bea4b5ccd9909e209a4401af873..86787cef645ac3e5e2eecae553d9c8a4ae52c0f6 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