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:
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);
}