فهرست منبع

bug: wrong limit for list constructors

Roberto Ierusalimschy 19 سال پیش
والد
کامیت
0782416a74
2فایلهای تغییر یافته به همراه34 افزوده شده و 2 حذف شده
  1. 32 0
      bugs
  2. 2 2
      lparser.c

+ 32 - 0
bugs

@@ -1013,3 +1013,35 @@ patch = [[
 ]],
 
 }
+
+Bug{
+what = [[list constructors have wrong limit]],
+
+report = [[by Norman Ramsey, June 2006]],
+
+since = "Lua 5.1",
+
+example = [[
+a = {}
+a[1] = "x={1"
+for i = 2, 2^20 do
+  a[i] = 1
+end
+a[#a + 1] = "}"
+s = table.concat(a, ",")
+assert(loadstring(s))()
+print(#x)
+]],
+
+patch = [[
+* lparser.c:
+ static void listfield (LexState *ls, struct ConsControl *cc) {
+   expr(ls, &cc->v);
+-  luaY_checklimit(ls->fs, cc->na, MAXARG_Bx, "items in a constructor");
++  luaY_checklimit(ls->fs, cc->na, MAX_INT, "items in a constructor");
+   cc->na++;
+   cc->tostore++;
+ }
+]],
+
+}

+ 2 - 2
lparser.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lparser.c,v 2.43 2006/06/22 16:12:59 roberto Exp roberto $
+** $Id: lparser.c,v 2.44 2006/07/11 15:53:29 roberto Exp roberto $
 ** Lua Parser
 ** See Copyright Notice in lua.h
 */
@@ -495,7 +495,7 @@ static void lastlistfield (FuncState *fs, struct ConsControl *cc) {
 
 static void listfield (LexState *ls, struct ConsControl *cc) {
   expr(ls, &cc->v);
-  luaY_checklimit(ls->fs, cc->na, MAXARG_Bx, "items in a constructor");
+  luaY_checklimit(ls->fs, cc->na, MAX_INT, "items in a constructor");
   cc->na++;
   cc->tostore++;
 }