浏览代码

cannot assign to unlimited variables, because it causes overflow in
the number of returns of a function.

Roberto Ierusalimschy 26 年之前
父节点
当前提交
d4dce57f5c
共有 2 个文件被更改,包括 17 次插入3 次删除
  1. 8 2
      bugs
  2. 9 1
      lparser.c

+ 8 - 2
bugs

@@ -88,11 +88,17 @@ Thu Mar  4 11:49:37 EST 1999
 ** lstrlib.c
 Fri Apr 30 11:10:20 EST 1999
 >> '$' at end of pattern was matching regular '$', too.
-(by anna)
+(by anna; since 2.5)
 
 ** lbuiltin.c
 Fri May 21 17:15:11 EST 1999
 >> foreach, foreachi, foreachvar points to function in stack when stack
 can be reallocated.
-(by tomas)
+(by tomas; since 3.2 beta)
+
+** lparser.c
+Wed Jun 16 10:32:46 EST 1999
+>> cannot assign to unlimited variables, because it causes overflow in
+the number of returns of a function.
+(since 3.1)
 

+ 9 - 1
lparser.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lparser.c,v 1.34 1999/05/21 19:54:06 roberto Exp roberto $
+** $Id: lparser.c,v 1.35 1999/06/16 13:22:04 roberto Exp roberto $
 ** LL(1) Parser and code generator for Lua
 ** See Copyright Notice in lua.h
 */
@@ -39,6 +39,11 @@
 #define SMAXUPVALUES "32"
 
 
+/* maximum number of variables in the left side of an assignment */
+#define MAXVARSLH	100
+#define SMAXVARSLH	"100"
+
+
 /*
 ** Variable descriptor:
 ** must include an "exp" option because LL(1) cannot distinguish
@@ -1221,6 +1226,9 @@ static void decinit (LexState *ls, listdesc *d) {
 
 static int assignment (LexState *ls, vardesc *v, int nvars) {
   int left = 0;
+  if (nvars > MAXVARSLH)
+    luaX_error(ls, "too many variables in a multiple assignment "
+                   MES_LIM(SMAXVARSLH));
   unloaddot(ls, v);
   if (ls->token == ',') {  /* assignment -> ',' NAME assignment */
     vardesc nv;