mirror of
https://github.com/The-Powder-Toy/The-Powder-Toy.git
synced 2025-08-17 21:51:20 +02:00
Protect new math.random against division by 0
This commit is contained in:
@@ -175,12 +175,28 @@ 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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user