diff options
Diffstat (limited to 'user/lua5.3/CVE-2020-24370.patch')
-rw-r--r-- | user/lua5.3/CVE-2020-24370.patch | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/user/lua5.3/CVE-2020-24370.patch b/user/lua5.3/CVE-2020-24370.patch new file mode 100644 index 000000000..0bfce24b1 --- /dev/null +++ b/user/lua5.3/CVE-2020-24370.patch @@ -0,0 +1,36 @@ +From b5bc89846721375fe30772eb8c5ab2786f362bf9 Mon Sep 17 00:00:00 2001 +From: Roberto Ierusalimschy <roberto@inf.puc-rio.br> +Date: Mon, 3 Aug 2020 16:25:28 -0300 +Subject: [PATCH] Fixed bug: Negation overflow in getlocal/setlocal + +--- + ldebug.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/ldebug.c b/ldebug.c +index e1389296e..bb0e1d4ac 100644 +--- a/src/ldebug.c ++++ b/src/ldebug.c +@@ -133,10 +133,11 @@ static const char *upvalname (Proto *p, int uv) { + + static const char *findvararg (CallInfo *ci, int n, StkId *pos) { + int nparams = clLvalue(ci->func)->p->numparams; +- if (n >= cast_int(ci->u.l.base - ci->func) - nparams) ++ int nvararg = cast_int(ci->u.l.base - ci->func) - nparams; ++ if (n <= -nvararg) + return NULL; /* no such vararg */ + else { +- *pos = ci->func + nparams + n; ++ *pos = ci->func + nparams - n; + return "(*vararg)"; /* generic name for any vararg */ + } + } +@@ -148,7 +149,7 @@ static const char *findlocal (lua_State *L, CallInfo *ci, int n, + StkId base; + if (isLua(ci)) { + if (n < 0) /* access to vararg values? */ +- return findvararg(ci, -n, pos); ++ return findvararg(ci, n, pos); + else { + base = ci->u.l.base; + name = luaF_getlocalname(ci_func(ci)->p, n, currentpc(ci)); |