From 6d0ea4806b79abbfd0c012b2fc0421ad47d7f593 Mon Sep 17 00:00:00 2001 From: Nep2Disk Date: Tue, 16 Sep 2025 01:56:00 +0000 Subject: [PATCH] Fix OS-specific behavior caused by integer overflow on Lua numbers (SRB2Classic Port) --- src/blua/lobject.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/blua/lobject.c b/src/blua/lobject.c index 0250de21d..12f7e8364 100644 --- a/src/blua/lobject.c +++ b/src/blua/lobject.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -89,8 +90,12 @@ int luaO_rawequalObj (const TValue *t1, const TValue *t2) { int luaO_str2d (const char *s, lua_Number *result) { char *endptr; - double r = lua_str2number(s, &endptr); - *result = (lua_Number)r; + long r = lua_str2number(s, &endptr); + if (r > INT32_MAX) + r = INT32_MAX; + else if (r < INT32_MIN) + r = INT32_MIN; + *result = (lua_Number)r; if (endptr == s) return 0; /* conversion failed */ if (*endptr == 'x' || *endptr == 'X') /* maybe an hexadecimal constant? */ *result = cast_num(strtoul(s, &endptr, 16));