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 753b19ba489c67e39107c151f53ef9f11af953a1..23dbea6c37ddd18fcb239d20b43f70c813c1c41e 100644 (file)
@@ -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));