If we're gonna check for array overrun, we really should do so before
authorTom Lane <[email protected]>
Tue, 8 Feb 2005 18:22:11 +0000 (18:22 +0000)
committerTom Lane <[email protected]>
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));