From 9f0c0fe0de64bc41efea73a2da881ff0a1036a03 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Tue, 10 Sep 2024 11:34:42 -0300 Subject: [PATCH] Bug: Wrong limit for local variables in 16-bit systems USHRT_MAX does not fit in an 'int' in 16-bit systems. --- lapi.c | 2 +- lparser.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lapi.c b/lapi.c index 332e97d1..04e09cff 100644 --- a/lapi.c +++ b/lapi.c @@ -1343,7 +1343,7 @@ void lua_warning (lua_State *L, const char *msg, int tocont) { LUA_API void *lua_newuserdatauv (lua_State *L, size_t size, int nuvalue) { Udata *u; lua_lock(L); - api_check(L, 0 <= nuvalue && nuvalue < USHRT_MAX, "invalid value"); + api_check(L, 0 <= nuvalue && nuvalue < SHRT_MAX, "invalid value"); u = luaS_newudata(L, size, nuvalue); setuvalue(L, s2v(L->top.p), u); api_incr_top(L); diff --git a/lparser.c b/lparser.c index 2b888c7c..aebddaf7 100644 --- a/lparser.c +++ b/lparser.c @@ -198,7 +198,7 @@ static int new_localvar (LexState *ls, TString *name) { checklimit(fs, dyd->actvar.n + 1 - fs->firstlocal, MAXVARS, "local variables"); luaM_growvector(L, dyd->actvar.arr, dyd->actvar.n + 1, - dyd->actvar.size, Vardesc, USHRT_MAX, "local variables"); + dyd->actvar.size, Vardesc, SHRT_MAX, "local variables"); var = &dyd->actvar.arr[dyd->actvar.n++]; var->vd.kind = VDKREG; /* default */ var->vd.name = name;