bug: wrong limit for list constructors

This commit is contained in:
Roberto Ierusalimschy 2006-07-12 16:02:50 -03:00
parent 3ca9af51a4
commit 0782416a74
2 changed files with 34 additions and 2 deletions

32
bugs
View File

@ -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++;
}
]],
}

View File

@ -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++;
}