From fdce412680543ec305a75b2d6bfeaf4d0fbb3b6a Mon Sep 17 00:00:00 2001 From: Misa Date: Fri, 12 Jun 2020 20:43:19 -0700 Subject: [PATCH] Guard all cases obj.getcompanion() is used unchecked And this the function with the least amount of cases where its sentinel value is used unchecked. Thankfully. obj.getplayer() was a bit of a slug to get through. --- desktop_version/src/Game.cpp | 37 ++++++++++++++++------- desktop_version/src/Logic.cpp | 56 +++++++++++++++++++++++++---------- 2 files changed, 66 insertions(+), 27 deletions(-) diff --git a/desktop_version/src/Game.cpp b/desktop_version/src/Game.cpp index 90dd0eda..925bc9fa 100644 --- a/desktop_version/src/Game.cpp +++ b/desktop_version/src/Game.cpp @@ -1533,8 +1533,11 @@ void Game::updatestate() companion = 6; i = obj.getcompanion(); - obj.entities[i].tile = 0; - obj.entities[i].state = 1; + if (i > -1) + { + obj.entities[i].tile = 0; + obj.entities[i].state = 1; + } advancetext = true; hascontrol = false; @@ -1559,8 +1562,11 @@ void Game::updatestate() music.playef(2); graphics.textboxactive(); i = obj.getcompanion(); - obj.entities[i].tile = 54; - obj.entities[i].state = 0; + if (i > -1) + { + obj.entities[i].tile = 54; + obj.entities[i].state = 0; + } } break; case 108: @@ -1574,8 +1580,11 @@ void Game::updatestate() { i = obj.getcompanion(); - obj.entities[i].tile = 0; - obj.entities[i].state = 1; + if (i > -1) + { + obj.entities[i].tile = 0; + obj.entities[i].state = 1; + } graphics.createtextbox("Follow me!", 185, 154, 164, 164, 255); state++; music.playef(11); @@ -1649,8 +1658,11 @@ void Game::updatestate() case 122: companion = 7; i = obj.getcompanion(); - obj.entities[i].tile = 6; - obj.entities[i].state = 1; + if (i > -1) + { + obj.entities[i].tile = 6; + obj.entities[i].state = 1; + } advancetext = true; hascontrol = false; @@ -1665,7 +1677,7 @@ void Game::updatestate() state++; music.playef(2); graphics.textboxactive(); - i = obj.getcompanion(); //obj.entities[i].tile = 66; obj.entities[i].state = 0; + i = obj.getcompanion(); if (i > -1) { /*obj.entities[i].tile = 66; obj.entities[i].state = 0;*/ } break; case 126: graphics.createtextbox("I can help with that!", 125, 152-40, 164, 164, 255); @@ -1687,8 +1699,11 @@ void Game::updatestate() music.playef(14); graphics.textboxactive(); i = obj.getcompanion(); - obj.entities[i].tile = 6; - obj.entities[i].state = 1; + if (i > -1) + { + obj.entities[i].tile = 6; + obj.entities[i].state = 1; + } break; case 132: graphics.textboxremove(); diff --git a/desktop_version/src/Logic.cpp b/desktop_version/src/Logic.cpp index a07cc20e..88fb978c 100644 --- a/desktop_version/src/Logic.cpp +++ b/desktop_version/src/Logic.cpp @@ -1226,8 +1226,11 @@ void gamelogic() case 6: obj.createentity(obj.entities[i].xp, 121.0f, 15.0f,1); //Y=121, the floor in that particular place! j = obj.getcompanion(); - obj.entities[j].vx = obj.entities[i].vx; - obj.entities[j].dir = obj.entities[i].dir; + if (j > -1) + { + obj.entities[j].vx = obj.entities[i].vx; + obj.entities[j].dir = obj.entities[i].dir; + } break; case 7: if (game.roomy <= 105) //don't jump after him! @@ -1241,8 +1244,11 @@ void gamelogic() obj.createentity(obj.entities[i].xp, 86.0f, 16.0f, 1); //Y=86, the ROOF in that particular place! } j = obj.getcompanion(); - obj.entities[j].vx = obj.entities[i].vx; - obj.entities[j].dir = obj.entities[i].dir; + if (j > -1) + { + obj.entities[j].vx = obj.entities[i].vx; + obj.entities[j].dir = obj.entities[i].dir; + } } break; case 8: @@ -1252,15 +1258,21 @@ void gamelogic() { obj.createentity(310, 177, 17, 1); j = obj.getcompanion(); - obj.entities[j].vx = obj.entities[i].vx; - obj.entities[j].dir = obj.entities[i].dir; + if (j > -1) + { + obj.entities[j].vx = obj.entities[i].vx; + obj.entities[j].dir = obj.entities[i].dir; + } } else { obj.createentity(obj.entities[i].xp, 177.0f, 17.0f, 1); j = obj.getcompanion(); - obj.entities[j].vx = obj.entities[i].vx; - obj.entities[j].dir = obj.entities[i].dir; + if (j > -1) + { + obj.entities[j].vx = obj.entities[i].vx; + obj.entities[j].dir = obj.entities[i].dir; + } } } break; @@ -1276,8 +1288,11 @@ void gamelogic() obj.createentity(obj.entities[i].xp, 185.0f, 18.0f, 15, 0, 1); } j = obj.getcompanion(); - obj.entities[j].vx = obj.entities[i].vx; - obj.entities[j].dir = obj.entities[i].dir; + if (j > -1) + { + obj.entities[j].vx = obj.entities[i].vx; + obj.entities[j].dir = obj.entities[i].dir; + } } break; case 10: @@ -1288,8 +1303,11 @@ void gamelogic() { obj.createentity(225.0f, 169.0f, 18, graphics.crewcolour(game.lastsaved), 0, 10); j = obj.getcompanion(); - obj.entities[j].vx = obj.entities[i].vx; - obj.entities[j].dir = obj.entities[i].dir; + if (j > -1) + { + obj.entities[j].vx = obj.entities[i].vx; + obj.entities[j].dir = obj.entities[i].dir; + } } } else if (game.roomy >= 52) @@ -1298,16 +1316,22 @@ void gamelogic() { obj.createentity(160.0f, 177.0f, 18, graphics.crewcolour(game.lastsaved), 0, 18, 1); j = obj.getcompanion(); - obj.entities[j].vx = obj.entities[i].vx; - obj.entities[j].dir = obj.entities[i].dir; + if (j > -1) + { + obj.entities[j].vx = obj.entities[i].vx; + obj.entities[j].dir = obj.entities[i].dir; + } } else { obj.flags[59] = true; obj.createentity(obj.entities[i].xp, -20.0f, 18.0f, graphics.crewcolour(game.lastsaved), 0, 10, 0); j = obj.getcompanion(); - obj.entities[j].vx = obj.entities[i].vx; - obj.entities[j].dir = obj.entities[i].dir; + if (j > -1) + { + obj.entities[j].vx = obj.entities[i].vx; + obj.entities[j].dir = obj.entities[i].dir; + } } } break;