From 9986f9aaef87aac63d5841692086444b2c01b3b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustaf=20Alh=C3=A4ll?= Date: Sat, 23 Aug 2025 17:30:18 +0200 Subject: [PATCH] Fix OS-specific behavior caused by integer overflow on Lua numbers --- src/blua/lobject.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/blua/lobject.c b/src/blua/lobject.c index 0250de21d..e74ae05a8 100644 --- a/src/blua/lobject.c +++ b/src/blua/lobject.c @@ -89,8 +89,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));