From 6412131325fb2266c3faf0faea93c1d5a4e479a9 Mon Sep 17 00:00:00 2001 From: Peibao Liu Date: Fri, 29 May 2020 02:04:15 -0400 Subject: [PATCH] Defensive code that tries to prevent a recurrence of problems. port from: https://www.sqlite.org/src/info/572105de1d44bca4 Signed-off-by: Peibao Liu --- src/expr.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff -Naur c/src/expr.c d/src/expr.c --- c/src/expr.c 2020-06-23 03:05:10.871000000 +0000 +++ d/src/expr.c 2020-06-23 03:15:14.426000000 +0000 @@ -3542,7 +3542,10 @@ switch( op ){ case TK_AGG_COLUMN: { AggInfo *pAggInfo = pExpr->pAggInfo; - struct AggInfo_col *pCol = &pAggInfo->aCol[pExpr->iAgg]; + struct AggInfo_col *pCol; + assert( pAggInfo!=0 ); + assert( pExpr->iAgg>=0 && pExpr->iAggnColumn ); + pCol = &pAggInfo->aCol[pExpr->iAgg]; if( !pAggInfo->directMode ){ assert( pCol->iMem>0 ); return pCol->iMem; @@ -3761,7 +3764,10 @@ } case TK_AGG_FUNCTION: { AggInfo *pInfo = pExpr->pAggInfo; - if( pInfo==0 ){ + if( pInfo==0 + || NEVER(pExpr->iAgg<0) + || NEVER(pExpr->iAgg>=pInfo->nFunc) + ){ assert( !ExprHasProperty(pExpr, EP_IntValue) ); sqlite3ErrorMsg(pParse, "misuse of aggregate: %s()", pExpr->u.zToken); }else{