Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add fflush() calls to fuzzershell to keep stderr and stdout synchronized. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
2b98a25237d1b3e64aec2772b622e8b3 |
User & Date: | drh 2015-04-25 00:20:15.042 |
Context
2015-04-25
| ||
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) | |
00:20 | Add fflush() calls to fuzzershell to keep stderr and stdout synchronized. (check-in: 2b98a25237 user: drh tags: trunk) | |
2015-04-24
| ||
23:45 | Add the --oom option to fuzzershell. (check-in: 14a9e4a377 user: drh tags: trunk) | |
Changes
Changes to tool/fuzzershell.c.
︙ | ︙ | |||
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | } /* ** This callback is invoked by sqlite3_log(). */ static void shellLog(void *pNotUsed, int iErrCode, const char *zMsg){ printf("LOG: (%d) %s\n", iErrCode, zMsg); } /* ** 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; printf("ROW #%u:\n", ++cnt); for(i=0; i<argc; i++){ printf(" %s=", colv[i]); if( argv[i] ){ printf("[%s]\n", argv[i]); }else{ printf("NULL\n"); } } return 0; } static int execNoop(void *NotUsed, int argc, char **argv, char **colv){ return 0; } #ifndef SQLITE_OMIT_TRACE /* ** 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); } #endif /*************************************************************************** ** eval() implementation copied from ../ext/misc/eval.c */ /* | > > > | 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 | } /* ** 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; printf("ROW #%u:\n", ++cnt); for(i=0; i<argc; i++){ printf(" %s=", colv[i]); if( argv[i] ){ printf("[%s]\n", argv[i]); }else{ printf("NULL\n"); } } fflush(stdout); return 0; } static int execNoop(void *NotUsed, int argc, char **argv, char **colv){ return 0; } #ifndef SQLITE_OMIT_TRACE /* ** 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 */ /* |
︙ | ︙ | |||
590 591 592 593 594 595 596 | 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; | > | > > | 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 | 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; } } for(iNext=i; iNext<nIn && strncmp(&zIn[iNext],"/****<",6)!=0; iNext++){} if( zDataOut ){ sqlite3_bind_blob(pStmt, 1, &zIn[i], iNext-i, SQLITE_STATIC); |
︙ | ︙ | |||
613 614 615 616 617 618 619 620 621 622 623 624 625 626 | zIn[iNext] = cSaved; continue; } zSql = &zIn[i]; if( verboseFlag ){ printf("INPUT (offset: %d, size: %d): [%s]\n", i, (int)strlen(&zIn[i]), &zIn[i]); }else if( multiTest && !quietFlag ){ int pct = oomFlag ? 100*iNext/nIn : ((10*iNext)/nIn)*10; if( pct!=lastPct ){ if( lastPct<0 ) printf("fuzz test:"); printf(" %d%%", pct); fflush(stdout); lastPct = pct; | > | 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 | zIn[iNext] = cSaved; continue; } zSql = &zIn[i]; if( verboseFlag ){ printf("INPUT (offset: %d, size: %d): [%s]\n", i, (int)strlen(&zIn[i]), &zIn[i]); fflush(stdout); }else if( multiTest && !quietFlag ){ int pct = oomFlag ? 100*iNext/nIn : ((10*iNext)/nIn)*10; if( pct!=lastPct ){ if( lastPct<0 ) printf("fuzz test:"); printf(" %d%%", pct); fflush(stdout); lastPct = pct; |
︙ | ︙ | |||
637 638 639 640 641 642 643 | zSql = zToFree = sqlite3_mprintf("SELECT strftime(%s);", zSql); break; } if( oomFlag ){ oomCnt = g.iOomCntdown = 1; g.nOomFault = 0; g.bOomOnce = 1; | | > > > | 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 | zSql = zToFree = sqlite3_mprintf("SELECT strftime(%s);", zSql); break; } if( oomFlag ){ oomCnt = g.iOomCntdown = 1; g.nOomFault = 0; g.bOomOnce = 1; if( verboseFlag ){ printf("Once.%d\n", oomCnt); fflush(stdout); } }else{ oomCnt = 0; } do{ rc = sqlite3_open_v2( "main.db", &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_MEMORY, |
︙ | ︙ | |||
706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 | }else{ g.iOomCntdown = ++oomCnt; g.nOomFault = 0; } if( oomCnt ){ if( verboseFlag ){ printf("%s.%d\n", g.bOomOnce ? "Once" : "Multi", oomCnt); } nTest++; } } }while( oomCnt>0 ); if( zToFree ){ sqlite3_free(zToFree); zToFree = 0; } zIn[iNext] = cSaved; if( verboseFlag ){ printf("RESULT-CODE: %d\n", rc); if( zErrMsg ){ printf("ERROR-MSG: [%s]\n", zErrBuf); } } /* Simulate an error if the TEST_FAILURE environment variable is "5" */ if( zFailCode ){ if( zFailCode[0]=='5' && zFailCode[1]==0 ){ abendError("simulated failure"); }else if( zFailCode[0]!=0 ){ /* If TEST_FAILURE is something other than 5, just exit the test | > > | 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 | }else{ g.iOomCntdown = ++oomCnt; g.nOomFault = 0; } if( oomCnt ){ if( verboseFlag ){ printf("%s.%d\n", g.bOomOnce ? "Once" : "Multi", oomCnt); fflush(stdout); } nTest++; } } }while( oomCnt>0 ); if( zToFree ){ sqlite3_free(zToFree); zToFree = 0; } zIn[iNext] = cSaved; if( verboseFlag ){ printf("RESULT-CODE: %d\n", rc); if( zErrMsg ){ printf("ERROR-MSG: [%s]\n", zErrBuf); } fflush(stdout); } /* Simulate an error if the TEST_FAILURE environment variable is "5" */ if( zFailCode ){ if( zFailCode[0]=='5' && zFailCode[1]==0 ){ abendError("simulated failure"); }else if( zFailCode[0]!=0 ){ /* If TEST_FAILURE is something other than 5, just exit the test |
︙ | ︙ |