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/expr.c | |
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/expr.c')
-rw-r--r-- | src/expr.c | 7 |
1 files changed, 4 insertions, 3 deletions
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++; |