From: drh <> Date: Mon, 27 Mar 2023 13:24:02 +0000 (+0000) Subject: Do not allow constant factoring during PRAGMA integrity_check, since the X-Git-Tag: version-3.42.0~209 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3594b2b3031ce0239ddedbd2c2b0367cf51b56ed;p=thirdparty%2Fsqlite.git Do not allow constant factoring during PRAGMA integrity_check, since the 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 --- diff --git a/manifest b/manifest index 4dc1905e93..fc6c84fa6d 100644 --- 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. diff --git a/manifest.uuid b/manifest.uuid index cde71f3477..2a932831a6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6f8b97f31a4c8552312b4c98432ea356ae54c06d9cc929969f50c3c88360cd7b \ No newline at end of file +0bba27b78112b2b2271e498f41c437df985aa2faab302ee5b29d9b60003a8379 \ No newline at end of file diff --git a/src/pragma.c b/src/pragma.c index 4686adfad5..4138752455 100644 --- a/src/pragma.c +++ b/src/pragma.c @@ -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 ** diff --git a/test/pragma.test b/test/pragma.test index 9ab332c3f1..a3e1d3cd65 100644 --- a/test/pragma.test +++ b/test/pragma.test @@ -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