1
0
mirror of https://github.com/sqlite/sqlite.git synced 2026-10-23 21:49:02 +03:00

Fix an off-by-one error in sqlite3GetUInt32(). The only user-visible effect of fixing this problem is that the error message emitted for a corrupt database has changed in one obscure case.

FossilOrigin-Name: 7f0149c9696ed8c804fb1f6d4e78f4e887e465015795e03bae0f8ea648d515b4
This commit is contained in:
dan
2026-09-24 15:34:05 +00:00
parent c62a4430f9
commit 4d577dfb33
4 changed files with 33 additions and 10 deletions

View File

@@ -1,5 +1,5 @@
C Work\saround\squirks\sin\sMSVC\sassociated\swith\s[d046d5f4c6855].
D 2026-09-24T10:55:16.787
C Fix\san\soff-by-one\serror\sin\ssqlite3GetUInt32().\sThe\sonly\suser-visible\seffect\sof\sfixing\sthis\sproblem\sis\sthat\sthe\serror\smessage\semitted\sfor\sa\scorrupt\sdatabase\shas\schanged\sin\sone\sobscure\scase.
D 2026-09-24T15:34:05.464
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -808,7 +808,7 @@ F src/trigger.c d6d8991ca346eb6f56e50a3c5df486176b67a9179336798a75bb05e622c72cac
F src/update.c 8cd088a0ce9536b9c81b300a18d0d6dc40025150efc42641edeecb409693023c
F src/upsert.c dd9f0fcccbfb4f20e1026a21a7254ba3f2c08e9cfa92affaff5b5ec3b00ea549
F src/utf.c c5bec56770b71fe75e12f1f7b0a512032e1fd3d1f83c50c4ab4474ced20347a4
F src/util.c cfdf9c6e5323af886d5ce766709da607ba1d14193ad3a15f4f462a45420e8211
F src/util.c 4437408e09cef6dbb63a8b8ba28be53bdc098ec890e5e64ad7ae1fc83448962e
F src/vacuum.c d3d35d8ae893d419ade5fa196d761a83bddcbb62137a1a157ae751ef38b26e82
F src/vdbe.c 076f4de32c507a713cb2d666d6bc6836c3b5637fec1159d2ef39328f73989377
F src/vdbe.h b6ffb28da04363fd5d439b8204118fd3f2e751abe4f8e3edb089155fb90d4607
@@ -1456,7 +1456,7 @@ F test/misc3.test 252118219f59672835c93da66679500f251e474f43e6aaecdc59a0794bb9c6
F test/misc4.test 10cd6addb2fa9093df4751a1b92b50440175dd5468a6ec84d0386e78f087db0e
F test/misc5.test 0a5d7604e197f10ee471280bfcaaf8229f9d8e2eebfef2c8853222cbc1ea9cd5
F test/misc6.test 953cc693924d88e6117aeba16f46f0bf5abede91
F test/misc7.test d595599972ec0b436985f0f02f243b68500ffc977b9b3194ec66c0866cfddcab
F test/misc7.test 4be3797297148024ff0fec6d84ac9981975ac1f956ff007c15a41eb0f635ba0c
F test/misc8.test 1c5e3fad1224f7bd67dbeb7dbf69cded89f6f846075805a72c7bfc6a1b1ed786
F test/misuse.test 859f37014d9824ca66bd90c36372c08c80c51c9593a7cfa8a31d4f92cd4d5b7f
F test/mjournal.test f054788b7ca261e3825e306a1c714060941b709fe90fde2f14336f355300d1f0
@@ -2221,8 +2221,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
P 1b097b30ac1009073bec72f67b3bcbe55478795149017ed3c72a32ab652bf4f7
R 784cc65e2b2092197666f0ee6ce533d4
U drh
Z 506ba936b7fe1d43c3f39a1a687f137e
P 18b6a43eb8c242e923a852c046a48fe8430d1596c286e114eb1383d6de9adafa
R 9321e115133ffbf8ca512eee01b4a6fd
U dan
Z 374cd219e0251894345c0612ad5021b4
# Remove this line to create a well-formed Fossil manifest.

View File

@@ -1 +1 @@
18b6a43eb8c242e923a852c046a48fe8430d1596c286e114eb1383d6de9adafa
7f0149c9696ed8c804fb1f6d4e78f4e887e465015795e03bae0f8ea648d515b4

View File

@@ -1547,7 +1547,7 @@ int sqlite3GetUInt32(const char *z, u32 *pI){
int i;
for(i=0; sqlite3Isdigit(z[i]); i++){
v = v*10 + z[i] - '0';
if( v>4294967296LL ){ *pI = 0; return 0; }
if( v>4294967295LL ){ *pI = 0; return 0; }
}
if( i==0 || z[i]!=0 ){ *pI = 0; return 0; }
*pI = (u32)v;

View File

@@ -570,4 +570,27 @@ if {$::tcl_platform(platform) eq "unix"
} {}
}
#-------------------------------------------------------------------------
reset_db
foreach {tn rp} {
1 45
2 4294967295
3 4294967296
4 4294967297
} {
reset_db
set rp [expr $rp]
do_execsql_test 24.$tn.1 {
CREATE TABLE t1(a, b, c);
PRAGMA writable_schema = 1;
UPDATE sqlite_schema SET rootpage = $rp;
}
db close
sqlite3 db test.db
do_catchsql_test 24.$tn.2 {
SELECT * FROM t1
} {1 {malformed database schema (t1) - invalid rootpage}}
}
finish_test