Fix quest array off-by-ones and add QuestID bounds checks
Several quest-loading loops used <=N over arrays sized N (Variables, Switches, Items, EpisodeVar, JobVar, PlanetVar, UnionVar), writing one element past the end on every character load. Also guard STB_QUEST table lookups with a rowcount bounds check before indexing by QuestID, which could otherwise read out of bounds for stale/invalid quest ids. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
725620e23c
commit
f59158a95c
4 files changed
+13
-12
No files matched your search
@@ -288,7 +288,7 @@ QUESTCOND(008)
|
||||
server->SendPM(client, "QuestTime - ulTime: %i btOp: %i", data->ulTime, data->btOp);
|
||||
if (client->CheckQuest < 0) return QUEST_FAILURE; // Not checking a quest, don't return success
|
||||
long int Time = 0;
|
||||
if (server->STB_QUEST.rows[client->quest.quests[client->CheckQuest].QuestID][1] > 0)
|
||||
if (client->quest.quests[client->CheckQuest].QuestID < server->STB_QUEST.rowcount && server->STB_QUEST.rows[client->quest.quests[client->CheckQuest].QuestID][1] > 0)
|
||||
{
|
||||
Time += client->quest.quests[client->CheckQuest].StartTime; // Start time
|
||||
Time += server->STB_QUEST.rows[client->quest.quests[client->CheckQuest].QuestID][1] * 10; // Time to finish
|
||||
|
||||
Reference in new issue
Block a user