]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Enhancements to fuzzcheck on unix so that it captures signals and prints
authordrh <drh@noemail.net>
Wed, 18 Dec 2019 13:02:18 +0000 (13:02 +0000)
committerdrh <drh@noemail.net>
Wed, 18 Dec 2019 13:02:18 +0000 (13:02 +0000)
the current test file and test number prior to terminating.

FossilOrigin-Name: ae7cbb246bff3717c283869ccf27ce83611422f3801176819465a8d96f6481bf

manifest
manifest.uuid
test/fuzzcheck.c

index b2d2fc21d0d461fb71709eae756f4be3f54e8dea..b7267caad1ef2974c29a7399b728718902daed0c 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sa\stest\scase\sfor\sfix\sin\scheck-in\s[1ca0bd982ab1183b]
-D 2019-12-18T09:17:55.360
+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-18T13:02:18.883
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -1009,7 +1009,7 @@ F test/fuzz3.test 9c813e6613b837cb7a277b0383cd66bfa07042b4cf0317157c35852f30043c
 F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634
 F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b
 F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2
-F test/fuzzcheck.c e8cf694f71a1ee39a59f7c2a38c0f8660db0656ce47c8a334b6e9a11f1e66c6d
+F test/fuzzcheck.c b2d4dbe3642b3d0d4feb25a24868817d329abdfc84f6678f72c158fd39d4b5fa
 F test/fuzzdata1.db d36e88741b4f23bcbaaf55b006290669d03c6c891cf13c7b3a53bc1b097b693f
 F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f
 F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba
@@ -1852,7 +1852,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P a96d02b4ab8c70cc20b322e4fa3a4b8814f05c51f5d8b071ec9d69e7379f3ea5
-R 627893d83616cc9edfdf2fa18820e055
+P 519864da8bb671941a64bf333c2086ad9a068b5f85759e7abd368f0706d3aefd
+R 0747f5adac09bdca7c2e5bcdc15904cf
 U drh
-Z d0b2b65af4cd0456b98ef351e7111692
+Z 387af0afadfac53d17a3ca9cbd82d5ad
index 00692a2360dfcfdf097092a2f0a69baee512df0d..5891ec034e6bc164cbc79217e5776039c9188ba5 100644 (file)
@@ -1 +1 @@
-519864da8bb671941a64bf333c2086ad9a068b5f85759e7abd368f0706d3aefd
\ No newline at end of file
+ae7cbb246bff3717c283869ccf27ce83611422f3801176819465a8d96f6481bf
\ No newline at end of file
index f1d2415de22f65714c88927e310f8eb74e6f8edc..cdf21e700ee07643eef156e20b101a7e6562692a 100644 (file)
@@ -134,6 +134,7 @@ struct Blob {
 */
 static struct GlobalVars {
   const char *zArgv0;              /* Name of program */
+  const char *zDbFile;             /* Name of database file */
   VFile aFile[MX_FILE];            /* The virtual filesystem */
   int nDb;                         /* Number of template databases */
   Blob *pFirstDb;                  /* Content of first template database */
@@ -148,11 +149,10 @@ static struct GlobalVars {
 */
 static void fatalError(const char *zFormat, ...){
   va_list ap;
-  if( g.zTestName[0] ){
-    fprintf(stderr, "%s (%s): ", g.zArgv0, g.zTestName);
-  }else{
-    fprintf(stderr, "%s: ", g.zArgv0);
-  }
+  fprintf(stderr, "%s", g.zArgv0);
+  if( g.zDbFile ) fprintf(stderr, " %s", g.zDbFile);
+  if( g.zTestName[0] ) fprintf(stderr, " (%s)", g.zTestName);
+  fprintf(stderr, ": ");
   va_start(ap, zFormat);
   vfprintf(stderr, zFormat, ap);
   va_end(ap);
@@ -161,12 +161,21 @@ static void fatalError(const char *zFormat, ...){
 }
 
 /*
-** Timeout handler
+** signal handler
 */
 #ifdef __unix__
-static void timeoutHandler(int NotUsed){
-  (void)NotUsed;
-  fatalError("timeout\n");
+static void signalHandler(int signum){
+  const char *zSig;
+  if( signum==SIGABRT ){
+    zSig = "abort";
+  }else if( signum==SIGALRM ){
+    zSig = "timeout";
+  }else if( signum==SIGSEGV ){
+    zSig = "segfault";
+  }else{
+    zSig = "signal";
+  }
+  fatalError(zSig);
 }
 #endif
 
@@ -1360,7 +1369,9 @@ int main(int argc, char **argv){
   sqlite3_initialize();
   iBegin = timeOfDay();
 #ifdef __unix__
-  signal(SIGALRM, timeoutHandler);
+  signal(SIGALRM, signalHandler);
+  signal(SIGSEGV, signalHandler);
+  signal(SIGABRT, signalHandler);
 #endif
   g.zArgv0 = argv[0];
   openFlags4Data = SQLITE_OPEN_READONLY;
@@ -1506,6 +1517,7 @@ int main(int argc, char **argv){
 
   /* Process each source database separately */
   for(iSrcDb=0; iSrcDb<nSrcDb; iSrcDb++){
+    g.zDbFile = azSrcDb[iSrcDb];
     rc = sqlite3_open_v2(azSrcDb[iSrcDb], &db,
                          openFlags4Data, pDfltVfs->zName);
     if( rc ){