aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-02-08 18:21:59 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-02-08 18:21:59 +0000
commitae50aa7ee8efcfdf8fc3966d226b24d3e4d036c2 (patch)
tree7330fb574e32d0e0bd5f024cfa35cd3ce5186bac
parent6c5c748d64abdc67455d379d673abe19b249058b (diff)
downloadpostgresql-ae50aa7ee8efcfdf8fc3966d226b24d3e4d036c2.tar.gz
postgresql-ae50aa7ee8efcfdf8fc3966d226b24d3e4d036c2.zip
If we're gonna check for array overrun, we really should do so before
overrunning the array, not after.
-rw-r--r--src/pl/plpgsql/src/gram.y41
1 files 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));