diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2007-07-31 16:39:52 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2007-07-31 16:39:52 -0300 |
commit | f6a81dbe9770f0e64d04b4e7be17c826d53253aa (patch) | |
tree | b793122f3eeff25b2b7146d9261c79b66f152a1f /bugs | |
parent | 3904a66ab0ea441504afb74160fb6ff5efd8d33b (diff) | |
download | lua-github-f6a81dbe9770f0e64d04b4e7be17c826d53253aa.tar.gz |
BUG: too many variables in an assignment may cause a C stack overflow
Diffstat (limited to 'bugs')
-rw-r--r-- | bugs | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -1382,6 +1382,11 @@ patch = [[remove the '#include "lobject.h" and use 'lua_pushfstring' instead of 'luaO_pushfstring']], } + + +----------------------------------------------------------------- +-- Lua 5.1.2 + Bug{ what = [[Lua may close standard files, which then may be used by C]], @@ -1493,6 +1498,29 @@ ltable.c: } Bug{ +what = [[Too many variables in an assignment may cause a +C stack overflow]], +report = [[Mike Pall, on 07/2007]], +since = [[5.0]], +example = [[ +$ ulimit -s 1024 # Reduce C stack to 1MB for quicker results +$ lua -e 'local s = "a,"; for i=1,18 do s = s..s end print(loadstring("local a "..s.."a=nil", ""))' +]], +patch = [[ +lparser.c: +@@ -938,6 +938,8 @@ + primaryexp(ls, &nv.v); + if (nv.v.k == VLOCAL) + check_conflict(ls, lh, &nv.v); ++ luaY_checklimit(ls->fs, nvars, LUAI_MAXCCALLS - ls->L->nCcalls, ++ "variable names"); + assignment(ls, &nv, nvars+1); + } + else { /* assignment -> `=' explist1 */ +]], +} + +Bug{ what = [[ ]], report = [[ , on ]], since = [[i ]], |