Fix a problem with the checksum-vfs and direct-overflow-reads. Forum post [forum:350e147cd1 | 350e147cd1].

FossilOrigin-Name: 7b7ce5f17fd63932a050b917b4356c23eec6040d1c4f51136393d7c6e3d40a63
This commit is contained in:
dan
2025-08-13 14:40:24 +00:00
4 changed files with 39 additions and 14 deletions
+5 -2
View File
@@ -433,6 +433,7 @@ static int cksmRead(
pFile = ORIGFILE(pFile);
rc = pFile->pMethods->xRead(pFile, zBuf, iAmt, iOfst);
if( rc==SQLITE_OK ){
assert( iAmt==100 || (iAmt & (iAmt-1))==0 );
if( iOfst==0 && iAmt>=100 && (
memcmp(zBuf,"SQLite format 3",16)==0 || memcmp(zBuf,"ZV-",3)==0
)){
@@ -446,7 +447,7 @@ static int cksmRead(
** (2) checksum verification is enabled
** (3) we are not in the middle of checkpoint
*/
if( iAmt>=512 && (iAmt & (iAmt-1))==0 /* (1) */
if( iAmt>=512 /* (1) */
&& p->verifyCksm /* (2) */
&& !p->inCkpt /* (3) */
){
@@ -611,8 +612,10 @@ static int cksmSectorSize(sqlite3_file *pFile){
** Return the device characteristic flags supported by a cksm-file.
*/
static int cksmDeviceCharacteristics(sqlite3_file *pFile){
int devchar = 0;
pFile = ORIGFILE(pFile);
return pFile->pMethods->xDeviceCharacteristics(pFile);
devchar = pFile->pMethods->xDeviceCharacteristics(pFile);
return (devchar & ~SQLITE_IOCAP_SUBPAGE_READ);
}
/* Create a shared memory file mapping */
+9 -8
View File
@@ -1,5 +1,5 @@
C Doc\scleanups\sin\smain.mk.\sNo\sfunctional\schanges.
D 2025-08-13T11:46:05.360
C Fix\sa\sproblem\swith\sthe\schecksum-vfs\sand\sdirect-overflow-reads.\sForum\spost\s[forum:350e147cd1\s|\s350e147cd1].
D 2025-08-13T14:40:24.606
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -363,7 +363,7 @@ F ext/misc/blobio.c a867c4c4617f6ec223a307ebfe0eabb45e0992f74dd47722b96f3e631c0e
F ext/misc/btreeinfo.c 8f5e6da2c82ec2f06ee0216e922370a436dafdbb06ffa7a552203515ff9e7ddf
F ext/misc/carray.c 34fac63770971611c5285de0a9f0ac67d504eaf66be891f637add9290f1c76a5
F ext/misc/carray.h 503209952ccf2431c7fd899ebb92bf46bf7635b38aace42ec8aa1b8d7b6e98a5
F ext/misc/cksumvfs.c 3a7931dd30667be6348af919f3f9e6188dfd7646b42af8e399a499b327f5bd63
F ext/misc/cksumvfs.c 077e7a556c2c79a0b4db3a5dc449cdf25541860f669f359e5bd965b6f5950649
F ext/misc/closure.c 5559daf1daf742228431db929d1aa86dd535a4224cc634a81d2fd0d1e6ad7839
F ext/misc/completion.c c3c8b3cc1293c34f04f8746a3adfbfedb43f00d113f8c984a1ed09433317e507
F ext/misc/compress.c 2c79a74330e0e0ba6cb3f7397f8ba5af12d46377ef5d3ee075e12dd8a6ed57f0
@@ -962,7 +962,7 @@ F test/changes2.test 07949edcc732af28cb54276bfb7d99723bccc1e905a423648bf57ac5cb0
F test/check.test 3a7972ccbaad80d496833da8714d69d9d5d4ce9e7211af1cd2a06ae488a7de12
F test/checkfault.test da6cb3d50247169efcb20bdf57863a3ccfa1d27d9e55cd324f0680096970f014
F test/chunksize.test faea11c5d6df9d392252a8dd879e1b1d68c9d3e8b7909cbed8bcec3b60c706f1
F test/cksumvfs.test 6f05dc95847c06a3dc10eee6b5ab1351d78314a52d0db15717c9388f4cb96646
F test/cksumvfs.test ec349149fbda923feb93e61a16674b6355b9ff6997f70c9e8f3b7843c51ea2af
F test/close.test eccbad8ecd611d974cbf47278c3d4e5874faf02d811338d5d348af42d56d647c
F test/closure01.test 9905883f1b171a4638f98fc764879f154e214a306d3d8daf412a15e7f3a9b1e0
F test/coalesce.test cee0dccb9fbd2d494b77234bccf9dc6c6786eb91
@@ -2169,8 +2169,9 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
P f341e7812984b41acd7dd2dd795a1716a8826af4326578dcdf7d7fdd55124ceb
R e32cc38c3ce8f20f725baa66d3c12e90
U stephan
Z 76cf94dc64de248e58289319551a4731
P 839c998443880161af06b9f7470ebfc828251c3c1accdae5f0fbbcc13408474c 8288edb9f930206f117823cf1d18af632dc6adbd7c4c3b9bcfc252e1a5e5b9cd
R dcede90cf6ef73118b3438717934ae9c
T +closed 8288edb9f930206f117823cf1d18af632dc6adbd7c4c3b9bcfc252e1a5e5b9cd
U dan
Z e946effdcb3d5b20b01e04f284da2068
# Remove this line to create a well-formed Fossil manifest.
+1 -1
View File
@@ -1 +1 @@
839c998443880161af06b9f7470ebfc828251c3c1accdae5f0fbbcc13408474c
7b7ce5f17fd63932a050b917b4356c23eec6040d1c4f51136393d7c6e3d40a63
+24 -3
View File
@@ -17,17 +17,38 @@ set testprefix cksumvfs
sqlite3_register_cksumvfs
db close
sqlite3 db test.db
file_control_reservebytes db 8
execsql {
PRAGMA page_size = 4096;
}
set text [db one "SELECT hex(randomblob(5000))"]
do_execsql_test 1.0 {
CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
INSERT INTO t1 VALUES(1, $text);
CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c);
INSERT INTO t1 VALUES(1, $text, NULL);
}
do_execsql_test 1.1 {
SELECT * FROM t1;
} [list 1 $text]
} [list 1 $text {}]
do_execsql_test 1.2 {
DELETE FROM t1;
}
do_test 1.3 {
execsql BEGIN
for {set ii 1500} {$ii < 10000} {incr ii} {
execsql { INSERT INTO t1 VALUES(NULL, randomblob(5000), randomblob($ii)) }
}
execsql COMMIT
} {}
do_execsql_test 1.4 {
SELECT count(b) FROM t1
} {8500}
finish_test