Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | In the fuzzershell, always invoke the trace and log callbacks even if output is suppressed. Keep track of the current test name in a global variable for simplified debugging. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
3045f454817f657df801358c40c665b0 |
User & Date: | drh 2015-04-25 11:19:51.094 |
Context
2015-04-25
| ||
11:35 | In fuzzershell: (1) comment fixes. (2) Set and clear g.zTestName[] correctly. (3) Use the value in g.zTestName[] in error messages. (check-in: b7394755fa user: drh tags: trunk) | |
11:19 | In the fuzzershell, always invoke the trace and log callbacks even if output is suppressed. Keep track of the current test name in a global variable for simplified debugging. (check-in: 3045f45481 user: drh tags: trunk) | |
00:32 | Do not send the extra ";" and "\000" tokens to the parser if a prior error has occurred. (check-in: 9aa70ddf2c user: drh tags: trunk) | |
Changes
Changes to tool/fuzzershell.c.
︙ | ︙ | |||
75 76 77 78 79 80 81 82 83 84 85 86 87 88 | sqlite3_mem_methods sOrigMem; /* Original memory methods */ sqlite3_mem_methods sOomMem; /* Memory methods with OOM simulator */ int iOomCntdown; /* Memory fails on 1 to 0 transition */ int nOomFault; /* Increments for each OOM fault */ int bOomOnce; /* Fail just once if true */ int bOomEnable; /* True to enable OOM simulation */ int nOomBrkpt; /* Number of calls to oomFault() */ } g; /* ** This routine is called when a simulated OOM occurs. It exists as a ** convenient place to set a debugger breakpoint. */ static void oomFault(void){ | > | 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | sqlite3_mem_methods sOrigMem; /* Original memory methods */ sqlite3_mem_methods sOomMem; /* Memory methods with OOM simulator */ int iOomCntdown; /* Memory fails on 1 to 0 transition */ int nOomFault; /* Increments for each OOM fault */ int bOomOnce; /* Fail just once if true */ int bOomEnable; /* True to enable OOM simulation */ int nOomBrkpt; /* Number of calls to oomFault() */ char zTestName[100]; /* Name of current test */ } g; /* ** This routine is called when a simulated OOM occurs. It exists as a ** convenient place to set a debugger breakpoint. */ static void oomFault(void){ |
︙ | ︙ | |||
162 163 164 165 166 167 168 169 170 171 172 173 174 175 | /* ** This callback is invoked by sqlite3_log(). */ static void shellLog(void *pNotUsed, int iErrCode, const char *zMsg){ printf("LOG: (%d) %s\n", iErrCode, zMsg); fflush(stdout); } /* ** This callback is invoked by sqlite3_exec() to return query results. */ static int execCallback(void *NotUsed, int argc, char **argv, char **colv){ int i; static unsigned cnt = 0; | > > > | 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | /* ** This callback is invoked by sqlite3_log(). */ static void shellLog(void *pNotUsed, int iErrCode, const char *zMsg){ printf("LOG: (%d) %s\n", iErrCode, zMsg); fflush(stdout); } static void shellLogNoop(void *pNotUsed, int iErrCode, const char *zMsg){ return; } /* ** This callback is invoked by sqlite3_exec() to return query results. */ static int execCallback(void *NotUsed, int argc, char **argv, char **colv){ int i; static unsigned cnt = 0; |
︙ | ︙ | |||
193 194 195 196 197 198 199 200 201 202 203 204 205 206 | /* ** This callback is invoked by sqlite3_trace() as each SQL statement ** starts. */ static void traceCallback(void *NotUsed, const char *zMsg){ printf("TRACE: %s\n", zMsg); fflush(stdout); } #endif /*************************************************************************** ** eval() implementation copied from ../ext/misc/eval.c */ /* | > > > | 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 | /* ** This callback is invoked by sqlite3_trace() as each SQL statement ** starts. */ static void traceCallback(void *NotUsed, const char *zMsg){ printf("TRACE: %s\n", zMsg); fflush(stdout); } static void traceNoop(void *NotUsed, const char *zMsg){ return; } #endif /*************************************************************************** ** eval() implementation copied from ../ext/misc/eval.c */ /* |
︙ | ︙ | |||
521 522 523 524 525 526 527 | { abendError("unknown option: %s", argv[i]); } }else{ abendError("unknown argument: %s", argv[i]); } } | | | 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 | { abendError("unknown option: %s", argv[i]); } }else{ abendError("unknown argument: %s", argv[i]); } } sqlite3_config(SQLITE_CONFIG_LOG, verboseFlag ? shellLog : shellLogNoop, 0); if( nHeap>0 ){ pHeap = malloc( nHeap ); if( pHeap==0 ) fatalError("cannot allocate %d-byte heap\n", nHeap); rc = sqlite3_config(SQLITE_CONFIG_HEAP, pHeap, nHeap, mnHeap); if( rc ) abendError("heap configuration failed: %d\n", rc); } if( oomFlag ){ |
︙ | ︙ | |||
593 594 595 596 597 598 599 600 601 602 603 604 605 606 | nHeader = i; for(nTest=0; i<nIn; i=iNext, nTest++){ char cSaved; if( strncmp(&zIn[i], "/****<",6)==0 ){ char *z = strstr(&zIn[i], ">****/"); if( z ){ z += 6; if( verboseFlag ){ printf("%.*s\n", (int)(z-&zIn[i]), &zIn[i]); fflush(stdout); } i += (int)(z-&zIn[i]); multiTest = 1; } | > > | 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 | nHeader = i; for(nTest=0; i<nIn; i=iNext, nTest++){ char cSaved; if( strncmp(&zIn[i], "/****<",6)==0 ){ char *z = strstr(&zIn[i], ">****/"); if( z ){ z += 6; sqlite3_snprintf(sizeof(g.zTestName), g.zTestName, "%.*", (int)(z-&zIn[i]), &zIn[i]); if( verboseFlag ){ printf("%.*s\n", (int)(z-&zIn[i]), &zIn[i]); fflush(stdout); } i += (int)(z-&zIn[i]); multiTest = 1; } |
︙ | ︙ | |||
674 675 676 677 678 679 680 | if( rc!=SQLITE_DONE ){ abendError("attempt to initialize the in-memory database failed (rc=%d)", rc); } sqlite3_backup_finish(pBackup); } #ifndef SQLITE_OMIT_TRACE | | | 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 | if( rc!=SQLITE_DONE ){ abendError("attempt to initialize the in-memory database failed (rc=%d)", rc); } sqlite3_backup_finish(pBackup); } #ifndef SQLITE_OMIT_TRACE sqlite3_trace(db, verboseFlag ? traceCallback : traceNoop, 0); #endif sqlite3_create_function(db, "eval", 1, SQLITE_UTF8, 0, sqlEvalFunc, 0, 0); sqlite3_create_function(db, "eval", 2, SQLITE_UTF8, 0, sqlEvalFunc, 0, 0); sqlite3_limit(db, SQLITE_LIMIT_LENGTH, 1000000); if( zEncoding ) sqlexec(db, "PRAGMA encoding=%s", zEncoding); if( pageSize ) sqlexec(db, "PRAGMA pagesize=%d", pageSize); if( doAutovac ) sqlexec(db, "PRAGMA auto_vacuum=FULL"); |
︙ | ︙ |