From cb3deaaaac1170d8a9ca06312a097ae7f8689024 Mon Sep 17 00:00:00 2001 From: Logan Aerl Arias Date: Sun, 7 Jan 2024 15:08:51 -0500 Subject: [PATCH 1/3] Update lauxlib.h lauxlib.h: mark luaL_error as a REPORT function --- src/blua/lauxlib.h | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/blua/lauxlib.h b/src/blua/lauxlib.h index c5ea45a1c..87844f405 100644 --- a/src/blua/lauxlib.h +++ b/src/blua/lauxlib.h @@ -31,6 +31,26 @@ LUALIB_API void (luaL_setn) (lua_State *L, int t, int n); /* extra error code for `luaL_load' */ #define LUA_ERRFILE (LUA_ERRERR+1) +/* Compiler-specific attributes and other macros */ + +#ifdef __GNUC__ // __attribute__ ((X)) + + #if ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) && defined (__MINGW32__) // MinGW, >= GCC 4.1 + #if 0 //defined (__USE_MINGW_ANSI_STDIO) && __USE_MINGW_ANSI_STDIO > 0 + #define FUNCREPORT __attribute__ ((format(gnu_printf, 2, 3))) + #elif (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) // >= GCC 4.4 + #define FUNCREPORT __attribute__ ((format(ms_printf, 2, 3))) + #else + #define FUNCREPORT __attribute__ ((format(printf, 2, 3))) + #endif + #else + #define FUNCREPORT __attribute__ ((format(printf, 2, 3))) + #endif +#endif + +#ifndef FUNCREPORT +#define FUNCREPORT +#endif typedef struct luaL_Reg { const char *name; @@ -65,7 +85,7 @@ LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname); LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); LUALIB_API void (luaL_where) (lua_State *L, int lvl); -LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); +LUALIB_API FUNCREPORT int (luaL_error) (lua_State *L, const char *fmt, ...); LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def, const char *const lst[]); From 4ae7a0e093f0949dd7631c1f6ef8bf8bb54c19ef Mon Sep 17 00:00:00 2001 From: Logan Aerl Arias Date: Sun, 7 Jan 2024 16:21:09 -0500 Subject: [PATCH 2/3] LUA mapthing_t checks add check that LUA can't access fields that don't exist in mapthing_t --- src/lua_infolib.c | 6 +++--- src/lua_mobjlib.c | 10 ++++++++-- src/lua_playerlib.c | 10 ++++++++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/lua_infolib.c b/src/lua_infolib.c index 03888f32e..a9dc32d32 100644 --- a/src/lua_infolib.c +++ b/src/lua_infolib.c @@ -482,7 +482,7 @@ static int spriteinfo_set(lua_State *L) } } else - return luaL_error(L, va("Field %s does not exist in spriteinfo_t", field)); + return luaL_error(L, "Field %s does not exist in spriteinfo_t", field); return 0; } @@ -576,7 +576,7 @@ static int framepivot_get(lua_State *L) lua_pushinteger(L, 0); } else - return luaL_error(L, va("Field %s does not exist in spriteframepivot_t", field)); + return luaL_error(L, "Field %s does not exist in spriteframepivot_t", field); return 1; } @@ -603,7 +603,7 @@ static int framepivot_set(lua_State *L) else if (fastcmp("rotaxis", field)) LUA_UsageWarning(L, "\"rotaxis\" is deprecated and will be removed.") else - return luaL_error(L, va("Field %s does not exist in spriteframepivot_t", field)); + return luaL_error(L, "Field %s does not exist in spriteframepivot_t", field); return 0; } diff --git a/src/lua_mobjlib.c b/src/lua_mobjlib.c index b5c6c0329..07ae931b9 100644 --- a/src/lua_mobjlib.c +++ b/src/lua_mobjlib.c @@ -973,6 +973,9 @@ static int mapthing_get(lua_State *L) return 0; } + if (field == (enum mapthing_e)-1) + return LUA_ErrInvalid(L, "fields"); + switch (field) { case mapthing_valid: @@ -1031,7 +1034,7 @@ static int mapthing_get(lua_State *L) break; default: if (devparm) - return luaL_error(L, LUA_QL("mapthing_t") " has no field named " LUA_QS, field); + return luaL_error(L, "%s %s", LUA_QL("mapthing_t"), va("has no field named: %ui", field)); else return 0; } @@ -1048,6 +1051,9 @@ static int mapthing_set(lua_State *L) if (!mt) return luaL_error(L, "accessed mapthing_t doesn't exist anymore."); + if (field == (enum mapthing_e)-1) + return LUA_ErrInvalid(L, "fields"); + if (hud_running) return luaL_error(L, "Do not alter mapthing_t in HUD rendering code!"); if (hook_cmd_running) @@ -1105,7 +1111,7 @@ static int mapthing_set(lua_State *L) mt->mobj = *((mobj_t **)luaL_checkudata(L, 3, META_MOBJ)); break; default: - return luaL_error(L, LUA_QL("mapthing_t") " has no field named " LUA_QS, field); + return luaL_error(L, "%s %s", LUA_QL("mapthing_t"), va("has no field named: %ui", field)); } return 0; diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index d12aa1c3f..cc7c70094 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -1431,8 +1431,8 @@ static int power_len(lua_State *L) return 1; } -#define NOFIELD luaL_error(L, LUA_QL("ticcmd_t") " has no field named " LUA_QS, field) -#define NOSET luaL_error(L, LUA_QL("ticcmd_t") " field " LUA_QS " should not be set directly.", ticcmd_opt[field]) +#define NOFIELD luaL_error(L, "%s %s", LUA_QL("ticcmd_t"), va("has no field named %ui", field)) +#define NOSET luaL_error(L, LUA_QL("ticcmd_t") " field %s should not be set directly.", ticcmd_opt[field]) enum ticcmd_e { @@ -1463,6 +1463,9 @@ static int ticcmd_get(lua_State *L) if (!cmd) return LUA_ErrInvalid(L, "player_t"); + if (field == (enum ticcmd_e)-1) + return LUA_ErrInvalid(L, "fields"); + switch (field) { case ticcmd_forwardmove: @@ -1497,6 +1500,9 @@ static int ticcmd_set(lua_State *L) if (!cmd) return LUA_ErrInvalid(L, "ticcmd_t"); + if (field == (enum ticcmd_e)-1) + return LUA_ErrInvalid(L, "fields"); + if (hud_running) return luaL_error(L, "Do not alter player_t in HUD rendering code!"); From be5ca1a4fb83e618bb6046a913e4d8334a13f976 Mon Sep 17 00:00:00 2001 From: Logan Aerl Arias Date: Sun, 7 Jan 2024 22:13:09 +0000 Subject: [PATCH 3/3] lua_infolib.c: replace lua_objlen with luaL_getn in setRamp() --- src/lua_infolib.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lua_infolib.c b/src/lua_infolib.c index a9dc32d32..4470c5efc 100644 --- a/src/lua_infolib.c +++ b/src/lua_infolib.c @@ -1662,7 +1662,7 @@ static void setRamp(lua_State *L, skincolor_t* c) { lua_pushnil(L); for (i=0; i