summaryrefslogtreecommitdiff
path: root/databases/postgresql80/patches/patch-ab
blob: 628b9abd136431de62e20190fba34cd93a098677 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
$NetBSD: patch-ab,v 1.1 2005/03/17 20:56:46 jschauma Exp $

--- src/pl/plpgsql/src/gram.y.orig	2005-03-17 15:43:26.000000000 -0500
+++ src/pl/plpgsql/src/gram.y	2005-03-17 15:43:31.000000000 -0500
@@ -1794,6 +1794,15 @@
 		}
 	}
 
+	/* 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")));
+	}
+
 	if (endtoken)
 		*endtoken = tok;
 
@@ -1940,6 +1949,16 @@
 
 					while ((tok = yylex()) == ',')
 					{
+						/* Check for array overflow */
+						if (nfields >= 1024)
+						{
+							plpgsql_error_lineno = plpgsql_scanner_lineno();
+							ereport(ERROR,
+									(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
+									errmsg("too many INTO variables specified")));
+						}
+
+
 						tok = yylex();
 						switch(tok)
 						{
@@ -2014,6 +2033,16 @@
 				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));
@@ -2085,6 +2114,15 @@
 
 				while ((tok = yylex()) == ',')
 				{
+					/* Check for array overflow */
+					if (nfields >= 1024)
+					{
+						plpgsql_error_lineno = plpgsql_scanner_lineno();
+						ereport(ERROR,
+								(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
+								errmsg("too many INTO variables specified")));
+					}
+
 					tok = yylex();
 					switch(tok)
 					{