1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Enhancements to fuzzcheck on unix so that it captures signals and prints

the current test file and test number prior to terminating.

FossilOrigin-Name: ae7cbb246bff3717c283869ccf27ce83611422f3801176819465a8d96f6481bf
This commit is contained in:
drh
2019-12-18 13:02:18 +00:00
parent 8c72afaf33
commit a7648f02e0
3 changed files with 29 additions and 17 deletions

View File

@ -1,5 +1,5 @@
C Add\sa\stest\scase\sfor\sfix\sin\scheck-in\s[1ca0bd982ab1183b] C Enhancements\sto\sfuzzcheck\son\sunix\sso\sthat\sit\scaptures\ssignals\sand\sprints\nthe\scurrent\stest\sfile\sand\stest\snumber\sprior\sto\sterminating.
D 2019-12-18T09:17:55.360 D 2019-12-18T13:02:18.883
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 df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@ -1009,7 +1009,7 @@ F test/fuzz3.test 9c813e6613b837cb7a277b0383cd66bfa07042b4cf0317157c35852f30043c
F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634 F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634
F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b
F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2 F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2
F test/fuzzcheck.c e8cf694f71a1ee39a59f7c2a38c0f8660db0656ce47c8a334b6e9a11f1e66c6d F test/fuzzcheck.c b2d4dbe3642b3d0d4feb25a24868817d329abdfc84f6678f72c158fd39d4b5fa
F test/fuzzdata1.db d36e88741b4f23bcbaaf55b006290669d03c6c891cf13c7b3a53bc1b097b693f F test/fuzzdata1.db d36e88741b4f23bcbaaf55b006290669d03c6c891cf13c7b3a53bc1b097b693f
F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f
F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba
@ -1852,7 +1852,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P a96d02b4ab8c70cc20b322e4fa3a4b8814f05c51f5d8b071ec9d69e7379f3ea5 P 519864da8bb671941a64bf333c2086ad9a068b5f85759e7abd368f0706d3aefd
R 627893d83616cc9edfdf2fa18820e055 R 0747f5adac09bdca7c2e5bcdc15904cf
U drh U drh
Z d0b2b65af4cd0456b98ef351e7111692 Z 387af0afadfac53d17a3ca9cbd82d5ad

View File

@ -1 +1 @@
519864da8bb671941a64bf333c2086ad9a068b5f85759e7abd368f0706d3aefd ae7cbb246bff3717c283869ccf27ce83611422f3801176819465a8d96f6481bf

View File

@ -134,6 +134,7 @@ struct Blob {
*/ */
static struct GlobalVars { static struct GlobalVars {
const char *zArgv0; /* Name of program */ const char *zArgv0; /* Name of program */
const char *zDbFile; /* Name of database file */
VFile aFile[MX_FILE]; /* The virtual filesystem */ VFile aFile[MX_FILE]; /* The virtual filesystem */
int nDb; /* Number of template databases */ int nDb; /* Number of template databases */
Blob *pFirstDb; /* Content of first template database */ Blob *pFirstDb; /* Content of first template database */
@ -148,11 +149,10 @@ static struct GlobalVars {
*/ */
static void fatalError(const char *zFormat, ...){ static void fatalError(const char *zFormat, ...){
va_list ap; va_list ap;
if( g.zTestName[0] ){ fprintf(stderr, "%s", g.zArgv0);
fprintf(stderr, "%s (%s): ", g.zArgv0, g.zTestName); if( g.zDbFile ) fprintf(stderr, " %s", g.zDbFile);
}else{ if( g.zTestName[0] ) fprintf(stderr, " (%s)", g.zTestName);
fprintf(stderr, "%s: ", g.zArgv0); fprintf(stderr, ": ");
}
va_start(ap, zFormat); va_start(ap, zFormat);
vfprintf(stderr, zFormat, ap); vfprintf(stderr, zFormat, ap);
va_end(ap); va_end(ap);
@ -161,12 +161,21 @@ static void fatalError(const char *zFormat, ...){
} }
/* /*
** Timeout handler ** signal handler
*/ */
#ifdef __unix__ #ifdef __unix__
static void timeoutHandler(int NotUsed){ static void signalHandler(int signum){
(void)NotUsed; const char *zSig;
fatalError("timeout\n"); if( signum==SIGABRT ){
zSig = "abort";
}else if( signum==SIGALRM ){
zSig = "timeout";
}else if( signum==SIGSEGV ){
zSig = "segfault";
}else{
zSig = "signal";
}
fatalError(zSig);
} }
#endif #endif
@ -1360,7 +1369,9 @@ int main(int argc, char **argv){
sqlite3_initialize(); sqlite3_initialize();
iBegin = timeOfDay(); iBegin = timeOfDay();
#ifdef __unix__ #ifdef __unix__
signal(SIGALRM, timeoutHandler); signal(SIGALRM, signalHandler);
signal(SIGSEGV, signalHandler);
signal(SIGABRT, signalHandler);
#endif #endif
g.zArgv0 = argv[0]; g.zArgv0 = argv[0];
openFlags4Data = SQLITE_OPEN_READONLY; openFlags4Data = SQLITE_OPEN_READONLY;
@ -1506,6 +1517,7 @@ int main(int argc, char **argv){
/* Process each source database separately */ /* Process each source database separately */
for(iSrcDb=0; iSrcDb<nSrcDb; iSrcDb++){ for(iSrcDb=0; iSrcDb<nSrcDb; iSrcDb++){
g.zDbFile = azSrcDb[iSrcDb];
rc = sqlite3_open_v2(azSrcDb[iSrcDb], &db, rc = sqlite3_open_v2(azSrcDb[iSrcDb], &db,
openFlags4Data, pDfltVfs->zName); openFlags4Data, pDfltVfs->zName);
if( rc ){ if( rc ){