From ae50aa7ee8efcfdf8fc3966d226b24d3e4d036c2 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 8 Feb 2005 18:21:59 +0000 Subject: [PATCH] If we're gonna check for array overrun, we really should do so before overrunning the array, not after. --- src/pl/plpgsql/src/gram.y | 41 +++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/pl/plpgsql/src/gram.y b/src/pl/plpgsql/src/gram.y index a080e53adec..a4fa1546b90 100644 --- a/src/pl/plpgsql/src/gram.y +++ b/src/pl/plpgsql/src/gram.y @@ -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)); -- 2.47.2