diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2005-02-08 18:22:11 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2005-02-08 18:22:11 +0000 |
commit | d60b1f5689d6a11513a1164dd485941ef8e3d8e7 (patch) | |
tree | 94a79e0c0f0cedeca4bf7e929af0a52596b83d98 /src | |
parent | 5c057d4b448249ad996e2f4c0c89f120e6270a51 (diff) | |
download | postgresql-d60b1f5689d6a11513a1164dd485941ef8e3d8e7.tar.gz postgresql-d60b1f5689d6a11513a1164dd485941ef8e3d8e7.zip |
If we're gonna check for array overrun, we really should do so before
overrunning the array, not after.
Diffstat (limited to 'src')
-rw-r--r-- | src/pl/plpgsql/src/gram.y | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/src/pl/plpgsql/src/gram.y b/src/pl/plpgsql/src/gram.y index a7eb2b3fee9..e4512b61339 100644 --- a/src/pl/plpgsql/src/gram.y +++ b/src/pl/plpgsql/src/gram.y @@ -4,7 +4,7 @@ * procedural language * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.48.2.2 2005/02/07 03:55:28 neilc Exp $ + * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.48.2.3 2005/02/08 18:22:11 tgl Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -1699,6 +1699,16 @@ read_sql_construct(int until, } 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_VARIABLE: @@ -1711,15 +1721,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"))); - } } expr = malloc(sizeof(PLpgSQL_expr) + sizeof(int) * nparams - sizeof(int)); @@ -1924,6 +1925,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_VARIABLE: @@ -1936,15 +1947,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)); |