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 dd3a847a06
PiperOrigin-RevId: 684928784
pull/18800/head
WenTao Ou 6 months ago committed by Copybara-Service
parent 2e82a2d7bf
commit a673d33949
  1. 6
      lua/def.c
  2. 2
      lua/upb.c
  3. 7
      lua/upbc.cc

@ -597,7 +597,7 @@ const upb_FileDef* lupb_FileDef_check(lua_State* L, int narg) {
static int lupb_FileDef_Dependency(lua_State* L) { static int lupb_FileDef_Dependency(lua_State* L) {
const upb_FileDef* f = lupb_FileDef_check(L, 1); 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); const upb_FileDef* dep = upb_FileDef_Dependency(f, index);
lupb_wrapper_pushwrapper(L, 1, dep, LUPB_FILEDEF); lupb_wrapper_pushwrapper(L, 1, dep, LUPB_FILEDEF);
return 1; return 1;
@ -611,7 +611,7 @@ static int lupb_FileDef_DependencyCount(lua_State* L) {
static int lupb_FileDef_enum(lua_State* L) { static int lupb_FileDef_enum(lua_State* L) {
const upb_FileDef* f = lupb_FileDef_check(L, 1); 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); const upb_EnumDef* e = upb_FileDef_TopLevelEnum(f, index);
lupb_wrapper_pushwrapper(L, 1, e, LUPB_ENUMDEF); lupb_wrapper_pushwrapper(L, 1, e, LUPB_ENUMDEF);
return 1; return 1;
@ -625,7 +625,7 @@ static int lupb_FileDef_enumcount(lua_State* L) {
static int lupb_FileDef_msg(lua_State* L) { static int lupb_FileDef_msg(lua_State* L) {
const upb_FileDef* f = lupb_FileDef_check(L, 1); 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); const upb_MessageDef* m = upb_FileDef_TopLevelMessage(f, index);
lupb_wrapper_pushwrapper(L, 1, m, LUPB_MSGDEF); lupb_wrapper_pushwrapper(L, 1, m, LUPB_MSGDEF);
return 1; return 1;

@ -41,11 +41,13 @@
/* Lua compatibility code *****************************************************/ /* Lua compatibility code *****************************************************/
/* Shims for upcoming Lua 5.3 functionality. */ /* Shims for upcoming Lua 5.3 functionality. */
#if LUA_VERSION_NUM < 503
static bool lua_isinteger(lua_State* L, int argn) { static bool lua_isinteger(lua_State* L, int argn) {
LUPB_UNUSED(L); LUPB_UNUSED(L);
LUPB_UNUSED(argn); LUPB_UNUSED(argn);
return false; return false;
} }
#endif
/* Utility functions **********************************************************/ /* Utility functions **********************************************************/

@ -50,6 +50,11 @@ static void PrintHexDigit(char digit, protobuf::io::Printer* printer) {
printer->WriteRaw(&text, 1); 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, static void PrintString(int max_cols, absl::string_view* str,
protobuf::io::Printer* printer) { protobuf::io::Printer* printer) {
printer->Print("\'"); printer->Print("\'");
@ -61,7 +66,7 @@ static void PrintString(int max_cols, absl::string_view* str,
} else if (ch == '\'') { } else if (ch == '\'') {
printer->PrintRaw("\\'"); printer->PrintRaw("\\'");
max_cols--; max_cols--;
} else if (isprint(ch)) { } else if (IsPrint(ch)) {
printer->WriteRaw(&ch, 1); printer->WriteRaw(&ch, 1);
max_cols--; max_cols--;
} else { } else {

Loading…
Cancel
Save