mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-14 00:22:38 +03:00
Add code to enforce the MAX_EXPR_DEPTH limit. (CVS 3968)
FossilOrigin-Name: 2c9c94a24d52a1c9f5d1b32cbdff794a2dd74126
This commit is contained in:
15
src/select.c
15
src/select.c
@@ -12,7 +12,7 @@
|
||||
** This file contains C code routines that are called by the parser
|
||||
** to handle SELECT statements in SQLite.
|
||||
**
|
||||
** $Id: select.c,v 1.343 2007/05/09 22:56:39 drh Exp $
|
||||
** $Id: select.c,v 1.344 2007/05/10 10:46:57 danielk1977 Exp $
|
||||
*/
|
||||
#include "sqliteInt.h"
|
||||
|
||||
@@ -2940,8 +2940,21 @@ int sqlite3Select(
|
||||
}else{
|
||||
needRestoreContext = 0;
|
||||
}
|
||||
#if SQLITE_MAX_EXPR_DEPTH>0
|
||||
/* Increment Parse.nHeight by the height of the largest expression
|
||||
** tree refered to by this, the parent select. The child select
|
||||
** may contain expression trees of at most
|
||||
** (SQLITE_MAX_EXPR_DEPTH-Parse.nHeight) height. This is a bit
|
||||
** more conservative than necessary, but much easier than enforcing
|
||||
** an exact limit.
|
||||
*/
|
||||
pParse->nHeight += sqlite3SelectExprHeight(p);
|
||||
#endif
|
||||
sqlite3Select(pParse, pItem->pSelect, SRT_EphemTab,
|
||||
pItem->iCursor, p, i, &isAgg, 0);
|
||||
#if SQLITE_MAX_EXPR_DEPTH>0
|
||||
pParse->nHeight -= sqlite3SelectExprHeight(p);
|
||||
#endif
|
||||
if( needRestoreContext ){
|
||||
pParse->zAuthContext = zSavedAuthContext;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user