diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2006-07-12 16:02:50 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2006-07-12 16:02:50 -0300 |
commit | 0782416a747a8ebb3570f3ac84918eaa4386f213 (patch) | |
tree | d3292e11bc2f2d35f51bb4c1d4a1f9380e956927 /bugs | |
parent | 3ca9af51a4f060cf2178901a67a21f8269af3224 (diff) | |
download | lua-0782416a747a8ebb3570f3ac84918eaa4386f213.tar.gz lua-0782416a747a8ebb3570f3ac84918eaa4386f213.tar.bz2 lua-0782416a747a8ebb3570f3ac84918eaa4386f213.zip |
bug: wrong limit for list constructors
Diffstat (limited to 'bugs')
-rw-r--r-- | bugs | 32 |
1 files changed, 32 insertions, 0 deletions
@@ -1013,3 +1013,35 @@ patch = [[ | |||
1013 | ]], | 1013 | ]], |
1014 | 1014 | ||
1015 | } | 1015 | } |
1016 | |||
1017 | Bug{ | ||
1018 | what = [[list constructors have wrong limit]], | ||
1019 | |||
1020 | report = [[by Norman Ramsey, June 2006]], | ||
1021 | |||
1022 | since = "Lua 5.1", | ||
1023 | |||
1024 | example = [[ | ||
1025 | a = {} | ||
1026 | a[1] = "x={1" | ||
1027 | for i = 2, 2^20 do | ||
1028 | a[i] = 1 | ||
1029 | end | ||
1030 | a[#a + 1] = "}" | ||
1031 | s = table.concat(a, ",") | ||
1032 | assert(loadstring(s))() | ||
1033 | print(#x) | ||
1034 | ]], | ||
1035 | |||
1036 | patch = [[ | ||
1037 | * lparser.c: | ||
1038 | static void listfield (LexState *ls, struct ConsControl *cc) { | ||
1039 | expr(ls, &cc->v); | ||
1040 | - luaY_checklimit(ls->fs, cc->na, MAXARG_Bx, "items in a constructor"); | ||
1041 | + luaY_checklimit(ls->fs, cc->na, MAX_INT, "items in a constructor"); | ||
1042 | cc->na++; | ||
1043 | cc->tostore++; | ||
1044 | } | ||
1045 | ]], | ||
1046 | |||
1047 | } | ||