From 3fbf6d51eab35c0c9d1f9dd60dcdcedcdec31f08 Mon Sep 17 00:00:00 2001 From: WenTao Ou Date: Fri, 11 Oct 2024 12:21:49 -0700 Subject: [PATCH] Fix compiling problems with lua 5.4 (#15113) Fixes #15112 Fixes #13750 Closes #15113 COPYBARA_INTEGRATE_REVIEW=https://github.com/protocolbuffers/protobuf/pull/15113 from owent:fixes_15112 dd3a847a0654b06a2e6f8c11d4e57c9bec9bae68 FUTURE_COPYBARA_INTEGRATE_REVIEW=https://github.com/protocolbuffers/protobuf/pull/15113 from owent:fixes_15112 dd3a847a0654b06a2e6f8c11d4e57c9bec9bae68 PiperOrigin-RevId: 684918921 --- lua/def.c | 6 +++--- lua/upb.c | 2 ++ lua/upbc.cc | 7 ++++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lua/def.c b/lua/def.c index 1f9ee1217b6c3..194800ec9a2bc 100644 --- a/lua/def.c +++ b/lua/def.c @@ -597,7 +597,7 @@ const upb_FileDef* lupb_FileDef_check(lua_State* L, int narg) { static int lupb_FileDef_Dependency(lua_State* L) { const upb_FileDef* f = lupb_FileDef_check(L, 1); - int index = luaL_checkint(L, 2); + int index = lupb_checkint32(L, 2); const upb_FileDef* dep = upb_FileDef_Dependency(f, index); lupb_wrapper_pushwrapper(L, 1, dep, LUPB_FILEDEF); return 1; @@ -611,7 +611,7 @@ static int lupb_FileDef_DependencyCount(lua_State* L) { static int lupb_FileDef_enum(lua_State* L) { const upb_FileDef* f = lupb_FileDef_check(L, 1); - int index = luaL_checkint(L, 2); + int index = lupb_checkint32(L, 2); const upb_EnumDef* e = upb_FileDef_TopLevelEnum(f, index); lupb_wrapper_pushwrapper(L, 1, e, LUPB_ENUMDEF); return 1; @@ -625,7 +625,7 @@ static int lupb_FileDef_enumcount(lua_State* L) { static int lupb_FileDef_msg(lua_State* L) { const upb_FileDef* f = lupb_FileDef_check(L, 1); - int index = luaL_checkint(L, 2); + int index = lupb_checkint32(L, 2); const upb_MessageDef* m = upb_FileDef_TopLevelMessage(f, index); lupb_wrapper_pushwrapper(L, 1, m, LUPB_MSGDEF); return 1; diff --git a/lua/upb.c b/lua/upb.c index e1e40613d4549..6a0eec45df99f 100644 --- a/lua/upb.c +++ b/lua/upb.c @@ -41,11 +41,13 @@ /* Lua compatibility code *****************************************************/ /* Shims for upcoming Lua 5.3 functionality. */ +#if LUA_VERSION_NUM < 503 static bool lua_isinteger(lua_State* L, int argn) { LUPB_UNUSED(L); LUPB_UNUSED(argn); return false; } +#endif /* Utility functions **********************************************************/ diff --git a/lua/upbc.cc b/lua/upbc.cc index bce4b7d28485f..5193614d505fa 100644 --- a/lua/upbc.cc +++ b/lua/upbc.cc @@ -50,6 +50,11 @@ static void PrintHexDigit(char digit, protobuf::io::Printer* printer) { printer->WriteRaw(&text, 1); } +static bool IsPrint(int ch) { + // isprint(ch) with negative values is UB. + return ch < 0 ? false : isprint(ch); +} + static void PrintString(int max_cols, absl::string_view* str, protobuf::io::Printer* printer) { printer->Print("\'"); @@ -61,7 +66,7 @@ static void PrintString(int max_cols, absl::string_view* str, } else if (ch == '\'') { printer->PrintRaw("\\'"); max_cols--; - } else if (isprint(ch)) { + } else if (IsPrint(ch)) { printer->WriteRaw(&ch, 1); max_cols--; } else {