1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-18 17:41:14 +03:00

If we're gonna check for array overrun, we really should do so before

overrunning the array, not after.
This commit is contained in:
Tom Lane 2005-02-08 18:22:11 +00:00
parent 5c057d4b44
commit d60b1f5689

View File

@ -4,7 +4,7 @@
* procedural language * procedural language
* *
* IDENTIFICATION * 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. * This software is copyrighted by Jan Wieck - Hamburg.
* *
@ -1699,6 +1699,16 @@ read_sql_construct(int until,
} }
if (plpgsql_SpaceScanned) if (plpgsql_SpaceScanned)
plpgsql_dstring_append(&ds, " "); 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) switch (tok)
{ {
case T_VARIABLE: case T_VARIABLE:
@ -1711,15 +1721,6 @@ read_sql_construct(int until,
plpgsql_dstring_append(&ds, yytext); plpgsql_dstring_append(&ds, yytext);
break; 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)); expr = malloc(sizeof(PLpgSQL_expr) + sizeof(int) * nparams - sizeof(int));
@ -1924,6 +1925,16 @@ make_select_stmt(void)
if (plpgsql_SpaceScanned) if (plpgsql_SpaceScanned)
plpgsql_dstring_append(&ds, " "); 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) switch (tok)
{ {
case T_VARIABLE: case T_VARIABLE:
@ -1936,15 +1947,6 @@ make_select_stmt(void)
plpgsql_dstring_append(&ds, yytext); plpgsql_dstring_append(&ds, yytext);
break; 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)); expr = malloc(sizeof(PLpgSQL_expr) + sizeof(int) * nparams - sizeof(int));