]> granicus.if.org Git - postgresql/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:22:11 +0000 (18:22 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 8 Feb 2005 18:22:11 +0000 (18:22 +0000)
overrunning the array, not after.

src/pl/plpgsql/src/gram.y

index a7eb2b3fee9c3ffd5b824f0d863c71450a42c834..e4512b613397573d912400e9f5005689de8b2cd2 100644 (file)
@@ -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));