aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2015-01-09 01:27:29 +0000
committerdrh <drh@noemail.net>2015-01-09 01:27:29 +0000
commit655814d2bd1cfa85fca22057719afa587307e802 (patch)
treed586ebf21b8d78e9697fd5c62f2b4be75fd0a93d /src/expr.c
parentfa5ed0283c2175b66d06824567cc6ccfa22b1dde (diff)
downloadsqlite-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.c7
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++;