From 4c13878ac2e3dfc782ed398254c8e28caec372a9 Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 20 Mar 2025 11:47:39 +0000 Subject: [PATCH] Fix a problem in the sqlite_dbpage() table-valued function when it is trying to truncate a file in locking-mode=EXCLUSIVE and the file was obtained via sqlite3_deserialize(). Problem found by dbsqlfuzz. FossilOrigin-Name: 346cf9794c6ce82ac32f7ccabc67240309306626709951593720abd198b103e3 --- manifest | 17 ++++++++--------- manifest.uuid | 2 +- src/dbpage.c | 4 ++-- test/fuzzdata8.db | Bin 4248576 -> 4249600 bytes 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index bcf3f4ed37..fc02250932 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Avoid\srunning\stest\scases\sinvolving\sANSI\scontrol\scharacters\sor\sUnicode\son\sWindows\sin\sa\sslave\sinterpreter,\sas\sthat\scombination\sdoes\snot\swork. -D 2025-03-19T11:53:46.152 +C Fix\sa\sproblem\sin\sthe\ssqlite_dbpage()\stable-valued\sfunction\swhen\sit\sis\ntrying\sto\struncate\sa\sfile\sin\slocking-mode=EXCLUSIVE\sand\sthe\sfile\swas\nobtained\svia\ssqlite3_deserialize().\s\sProblem\sfound\sby\sdbsqlfuzz. +D 2025-03-20T11:47:39.061 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -731,7 +731,7 @@ F src/build.c 3fe9b9d0f411cc2139a2d5ffa1c9b555417f89332f4dbf7f8e311c2e69e40c81 F src/callback.c acae8c8dddda41ee85cfdf19b926eefe830f371069f8aadca3aa39adf5b1c859 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/date.c 9db4d604e699a73e10b8e85a44db074a1f04c0591a77e2abfd77703f50dce1e9 -F src/dbpage.c 2e677acb658a29965e55398bbc61161cb7819da538057c8032adac7ab8e4a8c0 +F src/dbpage.c fcb1aafe00872a8aff9a7aa0ef7ff1b01e5817ec7bbd521f8f3e1e674ac8d609 F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42 F src/expr.c 61c3baab38f1b50eb4696e1f37c8f7ae1d1ecbfc1a35d446cfd1886624784131 @@ -1288,7 +1288,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db b8725a5f5cf7a3b7241a9038e57ca7e7cc8c3f4d86b44bd770617bda245ab2b0 F test/fuzzdata7.db 0166b56fd7a6b9636a1d60ef0a060f86ddaecf99400a666bb6e5bbd7199ad1f2 -F test/fuzzdata8.db c6f9cb7d2b808fb10894afe53ef00f51e73e43baa7aabdba7e9af4713fc5b186 +F test/fuzzdata8.db 8f34ae00d8d5d4747dd80983cf46161065e4f78324dcff3c893506ff8db3a4a6 F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test f64c4aef4c9e9edf1d6dc0d3f1e65dcc81e67c996403c88d14f09b74807a42bc @@ -2215,9 +2215,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 77db4d85e70fbf358ae2321c2601966666bdb4d971d7c113ce30a3e541458ee8 f6745a7355c62ee64c08e23b795f437dd74add903b55e1255c1d03f9a811170d -R a46056f95f3aa69f0dfc1aefc7391930 -T +closed f6745a7355c62ee64c08e23b795f437dd74add903b55e1255c1d03f9a811170d Closed\sby\sintegrate-merge. -U stephan -Z b755d7eda21c9f2918bebcee085f28b7 +P c7fd71c77f1716c9c85d0f41a07ebd7c96f2e9d5e4c1392fefa1fb53f3cbb746 +R 4634b7df48b729bfd4bde6753f06dc09 +U drh +Z 6107a05db82cfd1bf03b9f66e2d05b45 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 2846cf474a..0a3688252d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c7fd71c77f1716c9c85d0f41a07ebd7c96f2e9d5e4c1392fefa1fb53f3cbb746 +346cf9794c6ce82ac32f7ccabc67240309306626709951593720abd198b103e3 diff --git a/src/dbpage.c b/src/dbpage.c index eb5ab33fe1..f9fdcc5a37 100644 --- a/src/dbpage.c +++ b/src/dbpage.c @@ -395,8 +395,8 @@ static int dbpageUpdate( /* "INSERT INTO dbpage($PGNO,NULL)" causes page number $PGNO and ** all subsequent pages to be deleted. */ pTab->iDbTrunc = iDb; - pgno--; - pTab->pgnoTrunc = pgno; + pTab->pgnoTrunc = pgno-1; + pgno = 1; }else{ zErr = "bad page value"; goto update_fail; diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index 469df2c681a13064074d0a6e2fac0cf5939dbbcc..bfa3e3ecd09c7ef66a63cc958568e341dbdbd4a0 100644 GIT binary patch delta 3168 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 -- 2.47.3