From ae28a5b983b4962a58c1536a506ebd0444ebb1cc Mon Sep 17 00:00:00 2001 From: sapphonie Date: Thu, 26 Aug 2021 22:40:52 +0000 Subject: [PATCH] fixup offbyone error caused by fgetc incrementing lines at EOF, leading to hangs and crashes --- extension.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/extension.cpp b/extension.cpp index 104a2f3..21af4a3 100644 --- a/extension.cpp +++ b/extension.cpp @@ -8,7 +8,7 @@ SMEXT_LINK(&g_Cleaner); CDetour *g_pDetour = 0; -char ** g_szStrings; +char **g_szStrings; int g_iStrings = 0; #if SOURCE_ENGINE >= SE_LEFT4DEAD2 @@ -83,7 +83,8 @@ bool Cleaner::SDK_OnLoad(char *error, size_t maxlength, bool late) rewind(file); - g_szStrings = new char*[lines]; + // need lines+1 because the feget runs ++lines even if it's at EOF + g_szStrings = new char*[lines+1]; while (!feof(file)) { @@ -170,7 +171,12 @@ void Cleaner::SDK_OnUnload() g_pDetour = NULL; } +<<<<<<< HEAD + // we set lines to lines+1 earlier so this needs to be <= + for (int i = 0; i <= g_iStrings; ++i) +======= for (int i = 0; i < g_iStrings; ++i) +>>>>>>> a8148454bb66da9cd38df0878571524db7a658d6 { delete [] g_szStrings[i]; }