[Crash] Fix out of bound arrays, other potential crashes (#3166)

This commit is contained in:
Aeadoin
2023-04-01 12:44:41 -04:00
committed by GitHub
parent 0d509a7f3a
commit 0df84e1ee6
9 changed files with 34 additions and 24 deletions
+16 -9
View File
@@ -1802,8 +1802,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon)
case SE_Damage_Taken_Position_Mod:
{
//Mitigate if damage taken from behind base2 = 0, from front base2 = 1
if (limit_value < 0 || limit_value > 2)
if (limit_value < 0 || limit_value >= 2) {
break;
}
else if (base_value < 0 && newbon->Damage_Taken_Position_Mod[limit_value] > base_value)
newbon->Damage_Taken_Position_Mod[limit_value] = base_value;
else if (base_value > 0 && newbon->Damage_Taken_Position_Mod[limit_value] < base_value)
@@ -1813,8 +1814,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon)
case SE_Melee_Damage_Position_Mod:
{
if (limit_value < 0 || limit_value > 2)
if (limit_value < 0 || limit_value >= 2) {
break;
}
else if (base_value < 0 && newbon->Melee_Damage_Position_Mod[limit_value] > base_value)
newbon->Melee_Damage_Position_Mod[limit_value] = base_value;
else if (base_value > 0 && newbon->Melee_Damage_Position_Mod[limit_value] < base_value)
@@ -1825,9 +1827,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon)
case SE_Damage_Taken_Position_Amt:
{
//Mitigate if damage taken from behind base2 = 0, from front base2 = 1
if (limit_value < 0 || limit_value > 2)
if (limit_value < 0 || limit_value >= 2) {
break;
}
newbon->Damage_Taken_Position_Amt[limit_value] += base_value;
break;
}
@@ -1835,8 +1837,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon)
case SE_Melee_Damage_Position_Amt:
{
//Mitigate if damage taken from behind base2 = 0, from front base2 = 1
if (limit_value < 0 || limit_value > 2)
if (limit_value < 0 || limit_value >= 2) {
break;
}
newbon->Melee_Damage_Position_Amt[limit_value] += base_value;
break;
@@ -3884,8 +3887,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne
case SE_Damage_Taken_Position_Mod:
{
//Mitigate if damage taken from behind base2 = 0, from front base2 = 1
if (limit_value < 0 || limit_value > 2)
if (limit_value < 0 || limit_value >= 2) {
break;
}
if (AdditiveWornBonus)
new_bonus->Damage_Taken_Position_Mod[limit_value] += effect_value;
else if (effect_value < 0 && new_bonus->Damage_Taken_Position_Mod[limit_value] > effect_value)
@@ -3898,8 +3902,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne
case SE_Melee_Damage_Position_Mod:
{
//Increase damage by percent from behind base2 = 0, from front base2 = 1
if (limit_value < 0 || limit_value > 2)
if (limit_value < 0 || limit_value >= 2) {
break;
}
if (AdditiveWornBonus)
new_bonus->Melee_Damage_Position_Mod[limit_value] += effect_value;
else if (effect_value < 0 && new_bonus->Melee_Damage_Position_Mod[limit_value] > effect_value)
@@ -3912,8 +3917,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne
case SE_Damage_Taken_Position_Amt:
{
//Mitigate if damage taken from behind base2 = 0, from front base2 = 1
if (limit_value < 0 || limit_value > 2)
if (limit_value < 0 || limit_value >= 2) {
break;
}
new_bonus->Damage_Taken_Position_Amt[limit_value] += effect_value;
break;
@@ -3922,8 +3928,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne
case SE_Melee_Damage_Position_Amt:
{
//Mitigate if damage taken from behind base2 = 0, from front base2 = 1
if (limit_value < 0 || limit_value > 2)
if (limit_value < 0 || limit_value >= 2) {
break;
}
new_bonus->Melee_Damage_Position_Amt[limit_value] += effect_value;
break;