aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1999-06-16 10:35:01 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1999-06-16 10:35:01 -0300
commitd4dce57f5ca64c65c7c49eac683b8f807e8dc02d (patch)
tree59cd92fbd9687d00aa8fd8f94ece538c8d7c6c35
parent5c19ed2a13af8cdf364867ea66f9827bc139d06b (diff)
downloadlua-d4dce57f5ca64c65c7c49eac683b8f807e8dc02d.tar.gz
lua-d4dce57f5ca64c65c7c49eac683b8f807e8dc02d.tar.bz2
lua-d4dce57f5ca64c65c7c49eac683b8f807e8dc02d.zip
cannot assign to unlimited variables, because it causes overflow in
the number of returns of a function.
-rw-r--r--bugs10
-rw-r--r--lparser.c10
2 files changed, 17 insertions, 3 deletions
diff --git a/bugs b/bugs
index e6cb6dac..cf25945d 100644
--- a/bugs
+++ b/bugs
@@ -88,11 +88,17 @@ Thu Mar 4 11:49:37 EST 1999
88** lstrlib.c 88** lstrlib.c
89Fri Apr 30 11:10:20 EST 1999 89Fri Apr 30 11:10:20 EST 1999
90>> '$' at end of pattern was matching regular '$', too. 90>> '$' at end of pattern was matching regular '$', too.
91(by anna) 91(by anna; since 2.5)
92 92
93** lbuiltin.c 93** lbuiltin.c
94Fri May 21 17:15:11 EST 1999 94Fri May 21 17:15:11 EST 1999
95>> foreach, foreachi, foreachvar points to function in stack when stack 95>> foreach, foreachi, foreachvar points to function in stack when stack
96can be reallocated. 96can be reallocated.
97(by tomas) 97(by tomas; since 3.2 beta)
98
99** lparser.c
100Wed Jun 16 10:32:46 EST 1999
101>> cannot assign to unlimited variables, because it causes overflow in
102the number of returns of a function.
103(since 3.1)
98 104
diff --git a/lparser.c b/lparser.c
index 5a454b3f..f44a9563 100644
--- a/lparser.c
+++ b/lparser.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lparser.c,v 1.34 1999/05/21 19:54:06 roberto Exp roberto $ 2** $Id: lparser.c,v 1.35 1999/06/16 13:22:04 roberto Exp roberto $
3** LL(1) Parser and code generator for Lua 3** LL(1) Parser and code generator for Lua
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -39,6 +39,11 @@
39#define SMAXUPVALUES "32" 39#define SMAXUPVALUES "32"
40 40
41 41
42/* maximum number of variables in the left side of an assignment */
43#define MAXVARSLH 100
44#define SMAXVARSLH "100"
45
46
42/* 47/*
43** Variable descriptor: 48** Variable descriptor:
44** must include an "exp" option because LL(1) cannot distinguish 49** must include an "exp" option because LL(1) cannot distinguish
@@ -1221,6 +1226,9 @@ static void decinit (LexState *ls, listdesc *d) {
1221 1226
1222static int assignment (LexState *ls, vardesc *v, int nvars) { 1227static int assignment (LexState *ls, vardesc *v, int nvars) {
1223 int left = 0; 1228 int left = 0;
1229 if (nvars > MAXVARSLH)
1230 luaX_error(ls, "too many variables in a multiple assignment "
1231 MES_LIM(SMAXVARSLH));
1224 unloaddot(ls, v); 1232 unloaddot(ls, v);
1225 if (ls->token == ',') { /* assignment -> ',' NAME assignment */ 1233 if (ls->token == ',') { /* assignment -> ',' NAME assignment */
1226 vardesc nv; 1234 vardesc nv;