diff options
author | drh <drh@noemail.net> | 2015-01-09 01:27:29 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2015-01-09 01:27:29 +0000 |
commit | 655814d2bd1cfa85fca22057719afa587307e802 (patch) | |
tree | d586ebf21b8d78e9697fd5c62f2b4be75fd0a93d /src | |
parent | fa5ed0283c2175b66d06824567cc6ccfa22b1dde (diff) | |
download | sqlite-655814d2bd1cfa85fca22057719afa587307e802.tar.gz sqlite-655814d2bd1cfa85fca22057719afa587307e802.zip |
Fix three crash problems discovered by afl-fuzz.
Ticket [a59ae93ee990a55].
FossilOrigin-Name: fe5788633131281a0f27c5b75993ce2ff958bfeb
Diffstat (limited to 'src')
-rw-r--r-- | src/date.c | 4 | ||||
-rw-r--r-- | src/expr.c | 7 |
2 files changed, 7 insertions, 4 deletions
diff --git a/src/date.c b/src/date.c index 10d900626..d19b63360 100644 --- a/src/date.c +++ b/src/date.c @@ -895,8 +895,10 @@ static void strftimeFunc( size_t i,j; char *z; sqlite3 *db; - const char *zFmt = (const char*)sqlite3_value_text(argv[0]); + const char *zFmt; char zBuf[100]; + if( argc==0 ) return; + zFmt = (const char*)sqlite3_value_text(argv[0]); if( zFmt==0 || isDate(context, argc-1, argv+1, &x) ) return; db = sqlite3_context_db_handle(context); for(i=0, n=1; zFmt[i]; i++, n++){ diff --git a/src/expr.c b/src/expr.c index 817975ab3..32adedf9b 100644 --- a/src/expr.c +++ b/src/expr.c @@ -515,7 +515,7 @@ Expr *sqlite3PExpr( const Token *pToken /* Argument token */ ){ Expr *p; - if( op==TK_AND && pLeft && pRight ){ + if( op==TK_AND && pLeft && pRight && pParse->nErr==0 ){ /* Take advantage of short-circuit false optimization for AND */ p = sqlite3ExprAnd(pParse->db, pLeft, pRight); }else{ @@ -4069,10 +4069,11 @@ static int exprSrcCount(Walker *pWalker, Expr *pExpr){ int i; struct SrcCount *p = pWalker->u.pSrcCount; SrcList *pSrc = p->pSrc; - for(i=0; i<pSrc->nSrc; i++){ + int nSrc = pSrc ? pSrc->nSrc : 0; + for(i=0; i<nSrc; i++){ if( pExpr->iTable==pSrc->a[i].iCursor ) break; } - if( i<pSrc->nSrc ){ + if( i<nSrc ){ p->nThis++; }else{ p->nOther++; |