Skip to content

Commit 754b79d

Browse files
committed
Validate troop limit commands
1 parent 37e4166 commit 754b79d

2 files changed

Lines changed: 15 additions & 0 deletions

File tree

libs/s25main/buildings/nobMilitary.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,9 @@ unsigned nobMilitary::CalcRequiredNumTroops(FrontierDistance assumedFrontierDist
661661

662662
void nobMilitary::SetTroopLimit(const unsigned rank, const unsigned limit)
663663
{
664+
if(rank >= NUM_SOLDIER_RANKS)
665+
return;
666+
664667
troop_limits[rank] = limit;
665668
RegulateTroops();
666669
}

tests/s25Main/integration/testAttacking.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,18 @@ BOOST_FIXTURE_TEST_CASE(StartAttack, AttackFixture<>)
418418
TestFailingAttack(gwv, milBld1Pos, attackSrc, 1u);
419419
}
420420

421+
BOOST_FIXTURE_TEST_CASE(TroopLimitCommandIgnoresInvalidRank, AttackFixture<>)
422+
{
423+
const unsigned maxTroops = milBld0->GetMaxTroopsCt();
424+
const unsigned limit = maxTroops + 10;
425+
426+
this->SetTroopLimit(milBld0Pos, 0, limit);
427+
BOOST_TEST_REQUIRE(milBld0->GetTroopLimit(0) == limit);
428+
429+
this->SetTroopLimit(milBld0Pos, NUM_SOLDIER_RANKS, 0);
430+
BOOST_TEST_REQUIRE(milBld0->GetTroopLimit(0) == limit);
431+
}
432+
421433
BOOST_FIXTURE_TEST_CASE(ConquerBld, AttackFixture<>)
422434
{
423435
AddSoldiers(milBld0Pos, 1, 5);

0 commit comments

Comments
 (0)