lua

A copy of the Lua development repository
Log | Files | Refs | README

commit 25a2dac2bcab84d1f1ce8c49b673b4a032a29a4a
parent e3ce88c9e850b7e79751083014699c5eae1bff31
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date:   Thu, 24 Oct 2024 15:32:58 -0300

Always use unsigned int for indexing table-arrays

Diffstat:
Mltable.c | 8++++----
Mltests.c | 2+-
2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/ltable.c b/ltable.c @@ -951,7 +951,7 @@ lu_byte luaH_getint (Table *t, lua_Integer key, TValue *res) { if (keyinarray(t, key)) { lu_byte tag = *getArrTag(t, key - 1); if (!tagisempty(tag)) - farr2val(t, key - 1, tag, res); + farr2val(t, cast_uint(key) - 1, tag, res); return tag; } else @@ -1062,7 +1062,7 @@ int luaH_psetint (Table *t, lua_Integer key, TValue *val) { if (keyinarray(t, key)) { lu_byte *tag = getArrTag(t, key - 1); if (!tagisempty(*tag) || checknoTM(t->metatable, TM_NEWINDEX)) { - fval2arr(t, key - 1, tag, val); + fval2arr(t, cast_uint(key) - 1, tag, val); return HOK; /* success */ } else @@ -1118,7 +1118,7 @@ void luaH_finishset (lua_State *L, Table *t, const TValue *key, } else { /* array entry */ hres = ~hres; /* real index */ - obj2arr(t, hres, value); + obj2arr(t, cast_uint(hres), value); } } @@ -1140,7 +1140,7 @@ void luaH_set (lua_State *L, Table *t, const TValue *key, TValue *value) { */ void luaH_setint (lua_State *L, Table *t, lua_Integer key, TValue *value) { if (keyinarray(t, key)) - obj2arr(t, key - 1, value); + obj2arr(t, cast_uint(key) - 1, value); else { int ok = rawfinishnodeset(getintfromhash(t, key), value); if (!ok) { diff --git a/ltests.c b/ltests.c @@ -1043,7 +1043,7 @@ static int table_query (lua_State *L) { } else if (cast_uint(i) < asize) { lua_pushinteger(L, i); - arr2obj(t, i, s2v(L->top.p)); + arr2obj(t, cast_uint(i), s2v(L->top.p)); api_incr_top(L); lua_pushnil(L); }