aboutsummaryrefslogtreecommitdiff
path: root/src
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
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')
-rw-r--r--src/date.c4
-rw-r--r--src/expr.c7
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++;