summaryrefslogtreecommitdiff
path: root/bugs
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2007-07-31 16:39:52 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2007-07-31 16:39:52 -0300
commitf6a81dbe9770f0e64d04b4e7be17c826d53253aa (patch)
treeb793122f3eeff25b2b7146d9261c79b66f152a1f /bugs
parent3904a66ab0ea441504afb74160fb6ff5efd8d33b (diff)
downloadlua-github-f6a81dbe9770f0e64d04b4e7be17c826d53253aa.tar.gz
BUG: too many variables in an assignment may cause a C stack overflow
Diffstat (limited to 'bugs')
-rw-r--r--bugs28
1 files changed, 28 insertions, 0 deletions
diff --git a/bugs b/bugs
index f1af3721..d58e92f4 100644
--- a/bugs
+++ b/bugs
@@ -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 ]],