foxygit / doom Log in
commit 3b1f3899c29aed3b767c2039541a9f51be9702a8
Author:     Turo Lamminen <turol@iki.fi>
AuthorDate: Thu Apr 28 17:30:42 2022 +0300
Commit:     Turo Lamminen <turol@iki.fi>
CommitDate: Thu Apr 28 17:30:42 2022 +0300

    strife: Fix "array subscript is above array bounds" warning

    Refactor an if ladder into a switch and then explicitly ignore
    NUMPOWERS value which should never happen.
---
 src/strife/p_inter.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/strife/p_inter.c b/src/strife/p_inter.c
index b92cacfd..b8efad82 100644
--- a/src/strife/p_inter.c
+++ b/src/strife/p_inter.c
@@ -354,7 +354,8 @@ boolean P_GivePower(player_t* player, powertype_t power)
         return false;

     // villsa [STRIFE]
-    if(power == pw_targeter)
+    switch (power) {
+    case pw_targeter:
     {
         player->powers[power] = TARGTICS;
         P_SetPsprite(player, ps_targcenter, S_TRGT_00); // 10
@@ -368,7 +369,7 @@ boolean P_GivePower(player_t* player, powertype_t power)
         return true;
     }

-    if(power == pw_invisibility)
+    case pw_invisibility:
     {
         // if player already had this power...
         if(player->powers[power])
@@ -386,13 +387,13 @@ boolean P_GivePower(player_t* player, powertype_t power)
         return true;
     }

-    if(power == pw_ironfeet)
+    case pw_ironfeet:
     {
         player->powers[power] = IRONTICS;
         return true;
     }

-    if(power == pw_strength)
+    case pw_strength:
     {
         P_GiveBody(player, 100);
         player->powers[power] = 1;
@@ -400,7 +401,7 @@ boolean P_GivePower(player_t* player, powertype_t power)
     }

     // villsa [STRIFE]
-    if(power == pw_allmap)
+    case pw_allmap:
     {
         // remember in mapstate
         if(gamemap < 40)
@@ -411,14 +412,17 @@ boolean P_GivePower(player_t* player, powertype_t power)
     }

     // villsa [STRIFE]
-    if(power == pw_communicator)
+    case pw_communicator:
     {
         player->powers[power] = 1;
         return true;
     }

-    // default behavior:
-    player->powers[power] = 1;
+    case NUMPOWERS:
+        // This should never actually happen
+        break;
+    }
+
     return true;
 }