]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
If we're gonna check for array overrun, we really should do so before
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 8 Feb 2005 18:21:59 +0000 (18:21 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 8 Feb 2005 18:21:59 +0000 (18:21 +0000)
overrunning the array, not after.

src/pl/plpgsql/src/gram.y

index a080e53adec724b0a38ea933cbc2c7e1cb3c7c7f..a4fa1546b9096c28b1028dd609fa9fb76bac6ba5 100644 (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));