Index: src/select.c ================================================================== --- src/select.c +++ src/select.c @@ -1611,10 +1611,11 @@ testcase( aCol==0 ); }else{ nCol = 0; aCol = 0; } + assert( nCol==(i16)nCol ); *pnCol = nCol; *paCol = aCol; for(i=0, pCol=aCol; imallocFailed; i++, pCol++){ /* Get an appropriate name for the column @@ -4453,10 +4454,11 @@ p->pEList = pNew; } #if SQLITE_MAX_COLUMN if( p->pEList && p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ sqlite3ErrorMsg(pParse, "too many columns in result set"); + return WRC_Abort; } #endif return WRC_Continue; } Index: test/sqllimits1.test ================================================================== --- test/sqllimits1.test +++ test/sqllimits1.test @@ -872,10 +872,21 @@ catchsql { SELECT strftime($::format, 1); } } {1 {string or blob too big}} +do_catchsql_test sqllimits1.17.0 { + SELECT *,*,*,*,*,*,*,* FROM ( + SELECT *,*,*,*,*,*,*,* FROM ( + SELECT *,*,*,*,*,*,*,* FROM ( + SELECT *,*,*,*,*,*,*,* FROM ( + SELECT *,*,*,*,*,*,*,* FROM ( + SELECT 1,2,3,4,5,6,7,8,9,10 + ) + )))) +} "1 {too many columns in result set}" + foreach {key value} [array get saved] { catch {set $key $value} } finish_test