]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Have the sqlite_dbpage module correctly handle constraints of the form "WHERE pgno...
authordrh <>
Sat, 16 May 2026 16:08:03 +0000 (16:08 +0000)
committerdrh <>
Sat, 16 May 2026 16:08:03 +0000 (16:08 +0000)
FossilOrigin-Name: b6ce57f807297966f305d257e616f1c88a2f25c29f622249194b19d6fa014580

manifest
manifest.uuid
src/dbpage.c
test/dbpage.test

index 746c82d6ba84454fd4c177776a0162acee32278e..8e2f7f005ae1df644e3357a016191062d1cf92e2 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Prevent\sinternal-use-only\sSQL\sfunctions\sfrom\sbeing\sused\sinside\sof\sa\sCHECK\nconstraint\sadded\susing\sALTER\sTABLE\sADD\sCONSTRAINT.
-D 2026-05-11T14:47:45.288
+C Have\sthe\ssqlite_dbpage\smodule\scorrectly\shandle\sconstraints\sof\sthe\sform\s"WHERE\spgno=$pgno"\swhen\s$pgno\sis\san\sinteger\sthat\scannot\sbe\srepresented\sas\sa\ssigned,\s32-bit\svalue.
+D 2026-05-16T16:08:03.458
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -683,7 +683,7 @@ F src/callback.c 3605bbf02bd7ed46c79cd48346db4a32fc51d67624400539c0532f4eead804a
 F src/carray.c 3efe3982d5fb323334c29328a4e189ccaef6b95612a6084ad5fa124fd5db1179
 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
 F src/date.c 61e92f1f7e2e88e1cd91e91dc69eb2b2854e7877254470f9fabd776bfac922b8
-F src/dbpage.c c9ea81c11727f27e02874611e92773e68e2a90a875ef2404b084564c235fd91f
+F src/dbpage.c 98c716bc5c0c70af4e7934bfcddd707f14e78b5d4cf1e0602a07b485e1af2e74
 F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c
 F src/delete.c 1f2268d6fe3c78fc1bf794ba65d7026498b78e2342ffaf85825dedae546e6fde
 F src/expr.c 51e9c77ff5d9a21439e611fe6571a3cd50387e526e13c5614fd407e5b8571930
@@ -1040,7 +1040,7 @@ F test/dbfuzz001.test 6c9a4622029d69dc38926f115864b055cb2f39badd25ec22cbfb130c8b
 F test/dbfuzz2-seed1.db e6225c6f3d7b63f9c5b6867146a5f329d997ab105bee64644dc2b3a2f2aebaee
 F test/dbfuzz2.c 4b3c12de4d98b1b2d908ab03d217d4619e47c8b23d5e67f8a6f2b1bdee7cae23
 F test/dblwidth-a.sql 59dd59aa78ce8fd8ab631a3816516831f4e947b143039257e6fe132c3cea4171
-F test/dbpage.test 63fab1eb026bada121107e53436fa749bbf83281dc9dea17af422f7a5c0f289f
+F test/dbpage.test 2e3a50548edea551ef974b8f121f975852de9c5b16cb3284ac4bf2c9f2ed5a62
 F test/dbpagefault.test ea39de2ca86041a9c6df1135645180a76d0a8da93ac159e2fafe38e39636530b
 F test/dbstatus.test 4a4221a883025ffd39696b3d1b3910b928fb097d77e671351acb35f3aed42759
 F test/dbstatus2.test a36518c0f0951d8fd5a3dc36f99948ad1af93fb7fc0d2e03e5bb5a643186cf52
@@ -2198,9 +2198,9 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 061febcf41ca4872a0f407951e1507209daca7895122b909a7806c60b6e200c4
-Q +07beb966daddd0dfea36265eb38ebfcfbb10b0cbccda458dea501eda330a49f0
-R 883944f6226515dd9509faf4331aa983
+P 6cb565fe20049a48619fa3c7995de30fd9e284cfacd1652465e1f9083daf2669
+Q +350152d5124b71b3dd640c109dbac5f05a3a9583a335fbe25f707e1b754c1c74
+R a1f9164445cca44472cf6716983bb612
 U drh
-Z cbc5e5ff79e1e2e9f65295ded7466458
+Z bf49456621545adaa0498e79920722c7
 # Remove this line to create a well-formed Fossil manifest.
index e2009049558a41c3510118bd075d160213cc1c56..15bc23efc524e7c1a2590cd90fb976f75397c45a 100644 (file)
@@ -1 +1 @@
-6cb565fe20049a48619fa3c7995de30fd9e284cfacd1652465e1f9083daf2669
+b6ce57f807297966f305d257e616f1c88a2f25c29f622249194b19d6fa014580
index 71cf305d194ad281517e60c211ac976e009f7691..92bcc5e5f81ecefc250d4abbc462ca582a04b073 100644 (file)
@@ -259,12 +259,13 @@ static int dbpageFilter(
   pCsr->szPage = sqlite3BtreeGetPageSize(pBt);
   pCsr->mxPgno = sqlite3BtreeLastPage(pBt);
   if( idxNum & 1 ){
+    i64 iPg = sqlite3_value_int64(argv[idxNum>>1]);
     assert( argc>(idxNum>>1) );
-    pCsr->pgno = sqlite3_value_int(argv[idxNum>>1]);
-    if( pCsr->pgno<1 || pCsr->pgno>pCsr->mxPgno ){
+    if( iPg<1 || iPg>pCsr->mxPgno ){
       pCsr->pgno = 1;
       pCsr->mxPgno = 0;
     }else{
+      pCsr->pgno = (Pgno)iPg;
       pCsr->mxPgno = pCsr->pgno;
     }
   }else{
index 8039e0e1be99f3821cef953f834929291715d10e..5c40e6b6800ec80c8c6caa786746cbe9f9fdca5f 100644 (file)
@@ -251,5 +251,19 @@ do_execsql_test 720 {
   PRAGMA integrity_check
 } {ok}
 
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 800 {
+  CREATE TABLE x1(x);
+}
+
+do_execsql_test 810 {
+  SELECT pgno FROM sqlite_dbpage WHERE pgno=555
+} {}
+
+do_execsql_test 820 {
+  SELECT pgno FROM sqlite_dbpage WHERE pgno=4294967297
+} {}
+
 
 finish_test