If we're gonna check for array overrun, we really should do so before

overrunning the array, not after.
This commit is contained in:
Tom Lane 2005-02-08 18:21:59 +00:00
parent 6c5c748d64
commit ae50aa7ee8

View file

@ -4,7 +4,7 @@
* procedural language
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/pl/plpgsql/src/gram.y,v 1.64.4.2 2005/02/07 03:52:22 neilc Exp $
* $PostgreSQL: pgsql/src/pl/plpgsql/src/gram.y,v 1.64.4.3 2005/02/08 18:21:59 tgl Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@ -1766,8 +1766,19 @@ read_sql_construct(int until,
errmsg("missing \"%s\" at end of SQL statement",
expected)));
}
if (plpgsql_SpaceScanned)
plpgsql_dstring_append(&ds, " ");
/* Check for array overflow */
if (nparams >= 1024)
{
plpgsql_error_lineno = lno;
ereport(ERROR,
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
errmsg("too many variables specified in SQL statement")));
}
switch (tok)
{
case T_SCALAR:
@ -1792,15 +1803,6 @@ read_sql_construct(int until,
plpgsql_dstring_append(&ds, yytext);
break;
}
/* Check for array overflow */
if (nparams >= 1024)
{
plpgsql_error_lineno = lno;
ereport(ERROR,
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
errmsg("too many variables specified in SQL statement")));
}
}
if (endtoken)
@ -2008,6 +2010,16 @@ make_select_stmt(void)
if (plpgsql_SpaceScanned)
plpgsql_dstring_append(&ds, " ");
/* Check for array overflow */
if (nparams >= 1024)
{
plpgsql_error_lineno = plpgsql_scanner_lineno();
ereport(ERROR,
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
errmsg("too many variables specified in SQL statement")));
}
switch (tok)
{
case T_SCALAR:
@ -2032,15 +2044,6 @@ make_select_stmt(void)
plpgsql_dstring_append(&ds, yytext);
break;
}
/* Check for array overflow */
if (nparams >= 1024)
{
plpgsql_error_lineno = plpgsql_scanner_lineno();
ereport(ERROR,
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
errmsg("too many variables specified in SQL statement")));
}
}
expr = malloc(sizeof(PLpgSQL_expr) + sizeof(int) * nparams - sizeof(int));