Skip to content

Commit 26152ca

Browse files
authored
Add bounds check in script-originated random() and irandom() calls (#2507)
* Add bounds check in script-originated random() and irandom() calls * Fix bad random/irandom calls in scenarios * Add explanatory message to (i)random bounds error
1 parent 4a2c930 commit 26152ca

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

scripts/scenario_57_shoreline.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6562,7 +6562,7 @@ function setStations()
65626562
table.insert(transport_station_list,stationOutpost33)
65636563
neutralStations = neutralStations + 1
65646564
psx = random(-60000,-30000)
6565-
psy = random(612500,70000)
6565+
psy = random(61250,70000)
65666566
placeLando()
65676567
table.insert(place_space,{obj=stationLando,dist=station_dist[stationLando:getTypeName()],shape="circle"})
65686568
table.insert(stationList,stationLando)
@@ -6684,7 +6684,7 @@ function setStations()
66846684
art3 = Artifact():setModel("artifact6"):allowPickup(false):setScanningParameters(3,2):setRadarSignatureInfo(random(7,13),random(4,20), random(2,12))
66856685
art1:setPosition(random(-50000,50000),random(-80000,-70000))
66866686
art2:setPosition(random(-90000,-75000),random(-40000,-20000))
6687-
art3:setPosition(random(50000,75000),random(625000,80000))
6687+
art3:setPosition(random(50000,75000),random(62500,80000))
66886688
table.insert(place_space,{obj=art1,dist=300,shape="circle"})
66896689
table.insert(place_space,{obj=art2,dist=300,shape="circle"})
66906690
table.insert(place_space,{obj=art3,dist=300,shape="circle"})

scripts/scenario_58_race.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,7 @@ function setStations()
947947
table.insert(stationList,stationOutpost33)
948948
stationOutpost33.comms_data.goods.luxury = {cost = 75, quantity = 5}
949949
--Lando
950-
stationLando = placeStation(random(-60000,-30000),random(612500,70000),"Lando","Independent","Small Station")
950+
stationLando = placeStation(random(-60000,-30000),random(61250,70000),"Lando","Independent","Small Station")
951951
table.insert(stationList,stationLando)
952952
--Komov
953953
stationKomov = placeStation(random(-55000,-30000),random(70000,80000),"Komov","Independent","Small Station")
@@ -1035,7 +1035,7 @@ function setStations()
10351035
art3 = Artifact():setModel("artifact6"):allowPickup(false):setScanningParameters(3,2):setRadarSignatureInfo(random(7,13),random(4,20), random(2,12))
10361036
art1:setPosition(random(-50000,50000),random(-80000,-70000))
10371037
art2:setPosition(random(-90000,-75000),random(-40000,-20000))
1038-
art3:setPosition(random(50000,75000),random(625000,80000))
1038+
art3:setPosition(random(50000,75000),random(62500,80000))
10391039
artChoice = math.random(6)
10401040
if artChoice == 1 then
10411041
art1:setDescriptions(_("scienceDescription-artifact", "Unusual object"),_("scienceDescription-artifact", "Artifact with quantum biometric characteristics"))

src/script/scriptRandom.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,28 @@ static int lua_createRandomGenerator(lua_State* L)
5252
return 1;
5353
}
5454

55+
int lua_random(lua_State* L) {
56+
auto a = luaL_checknumber(L, -2);
57+
auto b = luaL_checknumber(L, -1);
58+
if (a > b)
59+
return luaL_error(L, "bad call random(%f, %f): lower bound is greater than upper bound", a, b);
60+
lua_pushnumber(L, random(a, b));
61+
return 1;
62+
}
63+
64+
int lua_irandom(lua_State* L) {
65+
auto a = luaL_checkinteger(L, -2);
66+
auto b = luaL_checkinteger(L, -1);
67+
if (a > b)
68+
return luaL_error(L, "bad call irandom(%d, %d): lower bound is greater than upper bound", a, b);
69+
lua_pushinteger(L, irandom(a, b));
70+
return 1;
71+
}
5572

5673
void registerScriptRandomFunctions(sp::script::Environment& env)
5774
{
58-
env.setGlobal("random", static_cast<float(*)(float, float)>(&random));
59-
env.setGlobal("irandom", &irandom);
75+
env.setGlobal("random", &lua_random);
76+
env.setGlobal("irandom", &lua_irandom);
6077

6178
env.setGlobal("RandomGenerator", &lua_createRandomGenerator);
6279
}

0 commit comments

Comments
 (0)