mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Guard against possible illegal array access (by Seven) (#121)
ClosestPanicTrigger() can return -1 but its use in indexing gTacticalStatus.bPanicTriggerIsAlarm was not checked in all the places in the code
This commit is contained in:
@@ -3206,14 +3206,14 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
|
||||
case 762:
|
||||
{
|
||||
// CODE: Set off Trigger
|
||||
INT8 bPanicTrigger;
|
||||
|
||||
bPanicTrigger = ClosestPanicTrigger( pSoldier );
|
||||
SetOffPanicBombs( pSoldier->ubID, bPanicTrigger );
|
||||
INT8 bPanicTrigger = ClosestPanicTrigger( pSoldier );
|
||||
if (bPanicTrigger != -1)
|
||||
{
|
||||
SetOffPanicBombs( pSoldier->ubID, bPanicTrigger );
|
||||
}
|
||||
// any AI guy has been specially given keys for this, now take them
|
||||
// away
|
||||
pSoldier->flags.bHasKeys = pSoldier->flags.bHasKeys >> 1;
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@@ -21916,13 +21916,15 @@ void SoldierCollapse( SOLDIERTYPE *pSoldier )
|
||||
|
||||
if ( pSoldier->flags.uiStatusFlags & SOLDIER_ENEMY )
|
||||
{
|
||||
// sevenfm: bPanicTriggerIsAlarm is always not NULL pointer
|
||||
//if ( !(gTacticalStatus.bPanicTriggerIsAlarm) && (gTacticalStatus.ubTheChosenOne == pSoldier->ubID) )
|
||||
if ( gTacticalStatus.ubTheChosenOne == pSoldier->ubID )
|
||||
{
|
||||
// replace this guy as the chosen one!
|
||||
gTacticalStatus.ubTheChosenOne = NOBODY;
|
||||
MakeClosestEnemyChosenOne( );
|
||||
auto bPanicTrigger = ClosestPanicTrigger(pSoldier);
|
||||
if (bPanicTrigger != -1 && !(gTacticalStatus.bPanicTriggerIsAlarm[bPanicTrigger]))
|
||||
{
|
||||
// replace this guy as the chosen one!
|
||||
gTacticalStatus.ubTheChosenOne = NOBODY;
|
||||
MakeClosestEnemyChosenOne( );
|
||||
}
|
||||
}
|
||||
|
||||
if ( (gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT) && (pSoldier->flags.uiStatusFlags & SOLDIER_UNDERAICONTROL) )
|
||||
|
||||
@@ -4974,7 +4974,7 @@ INT16 ubMinAPCost;
|
||||
|
||||
bPanicTrigger = ClosestPanicTrigger( pSoldier );
|
||||
// if it's an alarm trigger and team is alerted, ignore it
|
||||
if ( !(gTacticalStatus.bPanicTriggerIsAlarm[ bPanicTrigger ] && gTacticalStatus.Team[pSoldier->bTeam].bAwareOfOpposition) && PythSpacesAway( pSoldier->sGridNo, gTacticalStatus.sPanicTriggerGridNo[ bPanicTrigger ] ) < 10)
|
||||
if ( bPanicTrigger != -1 && !(gTacticalStatus.bPanicTriggerIsAlarm[ bPanicTrigger ] && gTacticalStatus.Team[pSoldier->bTeam].bAwareOfOpposition) && PythSpacesAway( pSoldier->sGridNo, gTacticalStatus.sPanicTriggerGridNo[ bPanicTrigger ] ) < 10)
|
||||
{
|
||||
PossiblyMakeThisEnemyChosenOne( pSoldier );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user