From 54d08f3496b0c558d5458f81d40c3594c6aaa6b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20B=C3=A1lint=20Misius?= Date: Sat, 15 Apr 2023 23:20:25 +0200 Subject: [PATCH] Protect new math.random against division by 0 --- src/lua/LuaScriptInterface.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/lua/LuaScriptInterface.cpp b/src/lua/LuaScriptInterface.cpp index 178d5d209..b5536bff6 100644 --- a/src/lua/LuaScriptInterface.cpp +++ b/src/lua/LuaScriptInterface.cpp @@ -175,13 +175,29 @@ static int mathRandom(lua_State *l) { // only thing that matters is that the rng not be luacon_sim->rng when !inSimEvent auto &rng = inSimEvent ? luacon_sim->rng : interfaceRng; + int lower, upper; switch (lua_gettop(l)) { - case 0: lua_pushnumber (l, rng.uniform01()); break; - case 1: lua_pushinteger(l, rng.between( 1, luaL_checkinteger(l, 1))); break; - default: lua_pushinteger(l, rng.between(luaL_checkinteger(l, 1), luaL_checkinteger(l, 2))); break; - } + case 0: + lua_pushnumber(l, rng.uniform01()); return 1; + + case 1: + lower = 1; + upper = luaL_checkinteger(l, 1); + break; + + default: + lower = luaL_checkinteger(l, 1); + upper = luaL_checkinteger(l, 2); + break; + } + if (upper < lower) + { + luaL_error(l, "interval is empty"); + } + lua_pushinteger(l, rng.between(lower, upper)); + return 1; } static int mathRandomseed(lua_State *l)