mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Use flexible arrays in the recovery extension and in the fuzzcheck test program.
Adjust the unix makefile to use -fsanitize=bounds-strict when building fuzzcheck-asan. FossilOrigin-Name: 6ea6a6b211fed1a14d7bec1ab1790dec09e2a00423860498a60b760c4a4561fa
This commit is contained in:
@ -140,9 +140,12 @@ struct RecoverColumn {
|
|||||||
typedef struct RecoverBitmap RecoverBitmap;
|
typedef struct RecoverBitmap RecoverBitmap;
|
||||||
struct RecoverBitmap {
|
struct RecoverBitmap {
|
||||||
i64 nPg; /* Size of bitmap */
|
i64 nPg; /* Size of bitmap */
|
||||||
u32 aElem[1]; /* Array of 32-bit bitmasks */
|
u32 aElem[]; /* Array of 32-bit bitmasks */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Size in bytes of a RecoverBitmap object sufficient to cover 32 pages */
|
||||||
|
#define SZ_RECOVERBITMAP_32 (16)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** State variables (part of the sqlite3_recover structure) used while
|
** State variables (part of the sqlite3_recover structure) used while
|
||||||
** recovering data for tables identified in the recovered schema (state
|
** recovering data for tables identified in the recovered schema (state
|
||||||
@ -382,7 +385,7 @@ static int recoverError(
|
|||||||
*/
|
*/
|
||||||
static RecoverBitmap *recoverBitmapAlloc(sqlite3_recover *p, i64 nPg){
|
static RecoverBitmap *recoverBitmapAlloc(sqlite3_recover *p, i64 nPg){
|
||||||
int nElem = (nPg+1+31) / 32;
|
int nElem = (nPg+1+31) / 32;
|
||||||
int nByte = sizeof(RecoverBitmap) + nElem*sizeof(u32);
|
int nByte = SZ_RECOVERBITMAP_32 + nElem*sizeof(u32);
|
||||||
RecoverBitmap *pRet = (RecoverBitmap*)recoverMalloc(p, nByte);
|
RecoverBitmap *pRet = (RecoverBitmap*)recoverMalloc(p, nByte);
|
||||||
|
|
||||||
if( pRet ){
|
if( pRet ){
|
||||||
|
2
main.mk
2
main.mk
@ -2169,7 +2169,7 @@ fuzzy: fuzzcheck$(T.exe)
|
|||||||
xbin: fuzzcheck$(T.exe)
|
xbin: fuzzcheck$(T.exe)
|
||||||
|
|
||||||
fuzzcheck-asan$(T.exe): $(FUZZCHECK_SRC) sqlite3.c sqlite3.h $(FUZZCHECK_DEP)
|
fuzzcheck-asan$(T.exe): $(FUZZCHECK_SRC) sqlite3.c sqlite3.h $(FUZZCHECK_DEP)
|
||||||
$(T.link) -o $@ -fsanitize=address $(FUZZCHECK_OPT) $(FUZZCHECK_SRC) \
|
$(T.link) -o $@ -fsanitize=address,bounds-strict $(FUZZCHECK_OPT) $(FUZZCHECK_SRC) \
|
||||||
sqlite3.c $(LDFLAGS.libsqlite3)
|
sqlite3.c $(LDFLAGS.libsqlite3)
|
||||||
fuzzy: fuzzcheck-asan$(T.exe)
|
fuzzy: fuzzcheck-asan$(T.exe)
|
||||||
xbin: fuzzcheck-asan$(T.exe)
|
xbin: fuzzcheck-asan$(T.exe)
|
||||||
|
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
|||||||
C Use\sflexible\sarrays\swhereever\sappropriate\sin\sFTS5.
|
C Use\sflexible\sarrays\sin\sthe\srecovery\sextension\sand\sin\sthe\sfuzzcheck\stest\sprogram.\nAdjust\sthe\sunix\smakefile\sto\suse\s-fsanitize=bounds-strict\swhen\sbuilding\nfuzzcheck-asan.
|
||||||
D 2025-03-15T12:22:39.392
|
D 2025-03-15T13:04:16.138
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
|
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
|
||||||
@ -523,7 +523,7 @@ F ext/recover/recoverpgsz.test 88766fcb810e52ee05335c456d4e5fb06d02b73d3ccb48c52
|
|||||||
F ext/recover/recoverrowid.test f948bf4024a5f41b0e21b8af80c60564c5b5d78c05a8d64fc00787715ff9f45f
|
F ext/recover/recoverrowid.test f948bf4024a5f41b0e21b8af80c60564c5b5d78c05a8d64fc00787715ff9f45f
|
||||||
F ext/recover/recoverslowidx.test c90d59c46bb8924a973ac6fbc38f3163cee38cc240256addcab1cf1a322c37dc
|
F ext/recover/recoverslowidx.test c90d59c46bb8924a973ac6fbc38f3163cee38cc240256addcab1cf1a322c37dc
|
||||||
F ext/recover/recoversql.test e66d01f95302a223bcd3fd42b5ee58dc2b53d70afa90b0d00e41e4b8eab20486
|
F ext/recover/recoversql.test e66d01f95302a223bcd3fd42b5ee58dc2b53d70afa90b0d00e41e4b8eab20486
|
||||||
F ext/recover/sqlite3recover.c 0ecdcb4df8967c84aa4dfe786816998bf2ef5cce55f4ac85ad4079e76f271027
|
F ext/recover/sqlite3recover.c 098b622d34499625a3c87bc31abc237f8e9b992fa93ac5071f280bb0d90e7fd8
|
||||||
F ext/recover/sqlite3recover.h 011c799f02deb70ab685916f6f538e6bb32c4e0025e79bfd0e24ff9c74820959
|
F ext/recover/sqlite3recover.h 011c799f02deb70ab685916f6f538e6bb32c4e0025e79bfd0e24ff9c74820959
|
||||||
F ext/recover/test_recover.c 072260d7452a3b81aba995b2b3269e7ec2aa7f06725544ba4c25b1b0a1dbc61a
|
F ext/recover/test_recover.c 072260d7452a3b81aba995b2b3269e7ec2aa7f06725544ba4c25b1b0a1dbc61a
|
||||||
F ext/repair/README.md 92f5e8aae749a4dae14f02eea8e1bb42d4db2b6ce5e83dbcdd6b1446997e0c15
|
F ext/repair/README.md 92f5e8aae749a4dae14f02eea8e1bb42d4db2b6ce5e83dbcdd6b1446997e0c15
|
||||||
@ -705,7 +705,7 @@ F ext/wasm/tests/opfs/sahpool/sahpool-pausing.js f264925cfc82155de38cecb3d204c36
|
|||||||
F ext/wasm/tests/opfs/sahpool/sahpool-worker.js bd25a43fc2ab2d1bafd8f2854ad3943ef673f7c3be03e95ecf1612ff6e8e2a61
|
F ext/wasm/tests/opfs/sahpool/sahpool-worker.js bd25a43fc2ab2d1bafd8f2854ad3943ef673f7c3be03e95ecf1612ff6e8e2a61
|
||||||
F ext/wasm/wasmfs.make 68999f5bd8c489239592d59a420f8c627c99169bbd6fa16a404751f757b9f702
|
F ext/wasm/wasmfs.make 68999f5bd8c489239592d59a420f8c627c99169bbd6fa16a404751f757b9f702
|
||||||
F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
|
F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
|
||||||
F main.mk f2f6af216cf14ec010d317e2f75ed5dc2134a2f9d6be7df3a96ee11149598ca1
|
F main.mk c7716a7f5559e9055519796fb27f257e4588bfae0f5c59e38b40f4e6ea51f5f0
|
||||||
F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
|
F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
|
||||||
F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
|
F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
|
||||||
F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421
|
F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421
|
||||||
@ -1278,7 +1278,7 @@ F test/fuzz3.test 70ba57260364b83e964707b9d4b5625284239768ab907dd387c740c0370ce3
|
|||||||
F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634
|
F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634
|
||||||
F test/fuzz_common.tcl b7197de6ed1ee8250a4f82d67876f4561b42ee8cbbfc6160dcb66331bad3f830
|
F test/fuzz_common.tcl b7197de6ed1ee8250a4f82d67876f4561b42ee8cbbfc6160dcb66331bad3f830
|
||||||
F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2
|
F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2
|
||||||
F test/fuzzcheck.c 97eab1b916d576a0f734b921598bdac05ff04d1f15c494dbe40ca71a772c56bb
|
F test/fuzzcheck.c 128789e46d14f2a3ab452fb341165897ff471c4bbef09f8e113c80839acf8941
|
||||||
F test/fuzzdata1.db 3e86d9cf5aea68ddb8e27c02d7dfdaa226347426c7eb814918e4d95475bf8517
|
F test/fuzzdata1.db 3e86d9cf5aea68ddb8e27c02d7dfdaa226347426c7eb814918e4d95475bf8517
|
||||||
F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f
|
F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f
|
||||||
F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba
|
F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba
|
||||||
@ -2213,8 +2213,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
|
|||||||
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
|
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
|
||||||
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
|
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
|
||||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||||
P 28ac776a23da2753265a7fe2ee2ebb09964815fc9058e69c08275fc217842edc
|
P 16dfc415b6e98a2acae79a24bb0afd401e60efc27cbdd1603a426fd33e17d427
|
||||||
R c3399a4ca4e26a3efb3d2d24d674f2fd
|
R 16bdd7a30aeb17479eb9d6ab2f69c679
|
||||||
U drh
|
U drh
|
||||||
Z 06abea0099d4abff8fb7955f85c850ef
|
Z f00ea2f5fbf083c38b332f57e1d5d154
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
@ -1 +1 @@
|
|||||||
16dfc415b6e98a2acae79a24bb0afd401e60efc27cbdd1603a426fd33e17d427
|
6ea6a6b211fed1a14d7bec1ab1790dec09e2a00423860498a60b760c4a4561fa
|
||||||
|
@ -129,9 +129,12 @@ struct Blob {
|
|||||||
int id; /* Id of this Blob */
|
int id; /* Id of this Blob */
|
||||||
int seq; /* Sequence number */
|
int seq; /* Sequence number */
|
||||||
int sz; /* Size of this Blob in bytes */
|
int sz; /* Size of this Blob in bytes */
|
||||||
unsigned char a[1]; /* Blob content. Extra space allocated as needed. */
|
unsigned char a[]; /* Blob content. Extra space allocated as needed. */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Size in bytes of a Blob object sufficient to store N byte of content */
|
||||||
|
#define SZ_BLOB(N) (offsetof(Blob,a) + (((N)+7)&~7))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Maximum number of files in the in-memory virtual filesystem.
|
** Maximum number of files in the in-memory virtual filesystem.
|
||||||
*/
|
*/
|
||||||
@ -512,13 +515,15 @@ static void blobListLoadFromDb(
|
|||||||
int *pN, /* OUT: Write number of blobs loaded here */
|
int *pN, /* OUT: Write number of blobs loaded here */
|
||||||
Blob **ppList /* OUT: Write the head of the blob list here */
|
Blob **ppList /* OUT: Write the head of the blob list here */
|
||||||
){
|
){
|
||||||
Blob head;
|
Blob *head;
|
||||||
Blob *p;
|
Blob *p;
|
||||||
sqlite3_stmt *pStmt;
|
sqlite3_stmt *pStmt;
|
||||||
int n = 0;
|
int n = 0;
|
||||||
int rc;
|
int rc;
|
||||||
char *z2;
|
char *z2;
|
||||||
|
unsigned char tmp[SZ_BLOB(8)];
|
||||||
|
|
||||||
|
head = (Blob*)tmp;
|
||||||
if( firstId>0 ){
|
if( firstId>0 ){
|
||||||
z2 = sqlite3_mprintf("%s WHERE rowid BETWEEN %d AND %d", zSql,
|
z2 = sqlite3_mprintf("%s WHERE rowid BETWEEN %d AND %d", zSql,
|
||||||
firstId, lastId);
|
firstId, lastId);
|
||||||
@ -528,11 +533,11 @@ static void blobListLoadFromDb(
|
|||||||
rc = sqlite3_prepare_v2(db, z2, -1, &pStmt, 0);
|
rc = sqlite3_prepare_v2(db, z2, -1, &pStmt, 0);
|
||||||
sqlite3_free(z2);
|
sqlite3_free(z2);
|
||||||
if( rc ) fatalError("%s", sqlite3_errmsg(db));
|
if( rc ) fatalError("%s", sqlite3_errmsg(db));
|
||||||
head.pNext = 0;
|
head->pNext = 0;
|
||||||
p = &head;
|
p = head;
|
||||||
while( SQLITE_ROW==sqlite3_step(pStmt) ){
|
while( SQLITE_ROW==sqlite3_step(pStmt) ){
|
||||||
int sz = sqlite3_column_bytes(pStmt, 1);
|
int sz = sqlite3_column_bytes(pStmt, 1);
|
||||||
Blob *pNew = safe_realloc(0, sizeof(*pNew)+sz );
|
Blob *pNew = safe_realloc(0, SZ_BLOB(sz+1));
|
||||||
pNew->id = sqlite3_column_int(pStmt, 0);
|
pNew->id = sqlite3_column_int(pStmt, 0);
|
||||||
pNew->sz = sz;
|
pNew->sz = sz;
|
||||||
pNew->seq = n++;
|
pNew->seq = n++;
|
||||||
@ -544,7 +549,7 @@ static void blobListLoadFromDb(
|
|||||||
}
|
}
|
||||||
sqlite3_finalize(pStmt);
|
sqlite3_finalize(pStmt);
|
||||||
*pN = n;
|
*pN = n;
|
||||||
*ppList = head.pNext;
|
*ppList = head->pNext;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user