You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
1.0 KiB
26 lines
1.0 KiB
diff -up lua-5.3.5/src/ldebug.c.CVE-2020-24370 lua-5.3.5/src/ldebug.c |
|
--- lua-5.3.5/src/ldebug.c.CVE-2020-24370 2020-08-19 13:37:17.075859557 -0400 |
|
+++ lua-5.3.5/src/ldebug.c 2020-08-19 13:38:53.117779244 -0400 |
|
@@ -133,10 +133,11 @@ static const char *upvalname (Proto *p, |
|
|
|
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 |
|
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));
|
|
|