Forráskód Böngészése

Merge pull request #1246 from Crispy-fried-chicken/patch-2

fix the negation overflow
bel2125 1 éve
szülő
commit
d405ed7926
1 módosított fájl, 4 hozzáadás és 3 törlés
  1. 4 3
      src/third_party/lua-5.2.4/src/ldebug.c

+ 4 - 3
src/third_party/lua-5.2.4/src/ldebug.c

@@ -116,10 +116,11 @@ static const char *upvalname (Proto *p, int uv) {
 
 
 static const char *findvararg (CallInfo *ci, int n, StkId *pos) {
 static const char *findvararg (CallInfo *ci, int n, StkId *pos) {
   int nparams = clLvalue(ci->func)->p->numparams;
   int nparams = clLvalue(ci->func)->p->numparams;
-  if (n >= ci->u.l.base - ci->func - nparams)
+  int nvararg  = ci->u.l.base - ci->func - nparams;
+  if (n < -nvararg)
     return NULL;  /* no such vararg */
     return NULL;  /* no such vararg */
   else {
   else {
-    *pos = ci->func + nparams + n;
+    *pos = ci->func + nparams - n;
     return "(*vararg)";  /* generic name for any vararg */
     return "(*vararg)";  /* generic name for any vararg */
   }
   }
 }
 }
@@ -131,7 +132,7 @@ static const char *findlocal (lua_State *L, CallInfo *ci, int n,
   StkId base;
   StkId base;
   if (isLua(ci)) {
   if (isLua(ci)) {
     if (n < 0)  /* access to vararg values? */
     if (n < 0)  /* access to vararg values? */
-      return findvararg(ci, -n, pos);
+      return findvararg(ci, n, pos);
     else {
     else {
       base = ci->u.l.base;
       base = ci->u.l.base;
       name = luaF_getlocalname(ci_func(ci)->p, n, currentpc(ci));
       name = luaF_getlocalname(ci_func(ci)->p, n, currentpc(ci));