mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Back-patch Neil's four additional buffer overrun checks.
This commit is contained in:
		@@ -4,7 +4,7 @@
 | 
				
			|||||||
 *						  procedural language
 | 
					 *						  procedural language
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * IDENTIFICATION
 | 
					 * IDENTIFICATION
 | 
				
			||||||
 *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.39.2.1 2005/01/27 01:44:42 neilc Exp $
 | 
					 *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.39.2.2 2005/02/08 18:22:45 tgl Exp $
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *	  This software is copyrighted by Jan Wieck - Hamburg.
 | 
					 *	  This software is copyrighted by Jan Wieck - Hamburg.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
@@ -1612,6 +1612,14 @@ 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;
 | 
				
			||||||
 | 
								elog(ERROR, "too many variables specified in SQL statement");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		switch (tok)
 | 
							switch (tok)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			case T_VARIABLE:
 | 
								case T_VARIABLE:
 | 
				
			||||||
@@ -1761,6 +1769,13 @@ make_select_stmt(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
					while ((tok = yylex()) == ',')
 | 
										while ((tok = yylex()) == ',')
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
 | 
											/* Check for array overflow */
 | 
				
			||||||
 | 
											if (nfields >= 1024)
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
 | 
												plpgsql_error_lineno = yylineno;
 | 
				
			||||||
 | 
												elog(ERROR, "too many INTO variables specified");
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						tok = yylex();
 | 
											tok = yylex();
 | 
				
			||||||
						switch(tok)
 | 
											switch(tok)
 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
@@ -1809,6 +1824,14 @@ 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 = yylineno;
 | 
				
			||||||
 | 
								elog(ERROR, "too many variables specified in SQL statement");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		switch (tok)
 | 
							switch (tok)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			case T_VARIABLE:
 | 
								case T_VARIABLE:
 | 
				
			||||||
@@ -1892,6 +1915,13 @@ make_fetch_stmt(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				while ((tok = yylex()) == ',')
 | 
									while ((tok = yylex()) == ',')
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
 | 
										/* Check for array overflow */
 | 
				
			||||||
 | 
										if (nfields >= 1024)
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											plpgsql_error_lineno = yylineno;
 | 
				
			||||||
 | 
											elog(ERROR, "too many INTO variables specified");
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					tok = yylex();
 | 
										tok = yylex();
 | 
				
			||||||
					switch(tok)
 | 
										switch(tok)
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user