diff options
author | Francois Perrad <fperrad@gmail.com> | 2016-06-22 10:08:55 +0200 |
---|---|---|
committer | Peter Korsgaard <peter@korsgaard.com> | 2016-06-22 10:34:56 +0200 |
commit | 23a9a94f1e78b51abcf2c84c4366c219726ad001 (patch) | |
tree | ddaa4e801d1474f941ee4bfec5934def76f31d45 /package/lua | |
parent | 841cbf632033bed5ab1a4651b6ebd3bf786b610d (diff) |
lua: add upstream patch to fix 5.3.3 loop parser
Signed-off-by: Francois Perrad <francois.perrad@gadz.org>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
Diffstat (limited to 'package/lua')
-rw-r--r-- | package/lua/5.3.3/0012-fix-loop-parser.patch | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/package/lua/5.3.3/0012-fix-loop-parser.patch b/package/lua/5.3.3/0012-fix-loop-parser.patch new file mode 100644 index 000000000..7b321e5dd --- /dev/null +++ b/package/lua/5.3.3/0012-fix-loop-parser.patch @@ -0,0 +1,31 @@ +Expression list with four or more expressions in a 'for' loop can crash the interpreter. + +Fetch from: https://www.lua.org/bugs.html#5.3.3-1 + +Signed-off-by: Francois Perrad <francois.perrad@gadz.org> + +--- a/src/lparser.c ++++ b/src/lparser.c +@@ -323,6 +323,8 @@ + luaK_nil(fs, reg, extra); + } + } ++ if (nexps > nvars) ++ ls->fs->freereg -= nexps - nvars; /* remove extra values */ + } + + +@@ -1160,11 +1162,8 @@ + int nexps; + checknext(ls, '='); + nexps = explist(ls, &e); +- if (nexps != nvars) { ++ if (nexps != nvars) + adjust_assign(ls, nvars, nexps, &e); +- if (nexps > nvars) +- ls->fs->freereg -= nexps - nvars; /* remove extra values */ +- } + else { + luaK_setoneret(ls->fs, &e); /* close last expression */ + luaK_storevar(ls->fs, &lh->v, &e); +-- |