aboutsummaryrefslogtreecommitdiff
path: root/src/resolve.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2016-09-05 12:02:34 +0000
committerdrh <drh@noemail.net>2016-09-05 12:02:34 +0000
commitb29e60c4487b6abc55acd8e0fe1694c590f18412 (patch)
treed3e367b64969b186e9002445d5f38cf432ba9811 /src/resolve.c
parent80aa545337b65289a0db4e73c97d763c357aad53 (diff)
downloadsqlite-b29e60c4487b6abc55acd8e0fe1694c590f18412.tar.gz
sqlite-b29e60c4487b6abc55acd8e0fe1694c590f18412.zip
Catch vector size mismatch problems during name resolution to avoid later
problems. FossilOrigin-Name: 56562a0346170cf7b72445976864b058437a8ac3
Diffstat (limited to 'src/resolve.c')
-rw-r--r--src/resolve.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/resolve.c b/src/resolve.c
index 206015fcf..a5cc06b91 100644
--- a/src/resolve.c
+++ b/src/resolve.c
@@ -776,6 +776,33 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
notValid(pParse, pNC, "parameters", NC_IsCheck|NC_PartIdx|NC_IdxExpr);
break;
}
+ case TK_EQ:
+ case TK_NE:
+ case TK_LT:
+ case TK_LE:
+ case TK_GT:
+ case TK_GE:
+ case TK_IS:
+ case TK_ISNOT: {
+ int nLeft, nRight;
+ if( pParse->db->mallocFailed ) break;
+ assert( pExpr->pRight!=0 );
+ assert( pExpr->pLeft!=0 );
+ nLeft = sqlite3ExprVectorSize(pExpr->pLeft);
+ nRight = sqlite3ExprVectorSize(pExpr->pRight);
+ if( nLeft!=nRight ){
+ testcase( pExpr->op==TK_EQ );
+ testcase( pExpr->op==TK_NE );
+ testcase( pExpr->op==TK_LT );
+ testcase( pExpr->op==TK_LE );
+ testcase( pExpr->op==TK_GT );
+ testcase( pExpr->op==TK_GE );
+ testcase( pExpr->op==TK_IS );
+ testcase( pExpr->op==TK_ISNOT );
+ sqlite3ErrorMsg(pParse, "row value misused");
+ }
+ break;
+ }
}
return (pParse->nErr || pParse->db->mallocFailed) ? WRC_Abort : WRC_Continue;
}