From 3a7197038daf5b48ae71eea22876cae9bfff3012 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Sun, 24 Aug 2008 04:24:53 +0000 Subject: [PATCH] Fixed amb1952: Crash when first plugin listed in metaplugins.ini had an alias and was not on the first line of the file. --HG-- branch : sourcemm-1.4.x extra : convert_revision : svn%3Ac2935e3e-5518-0410-8daf-afa5dab7d4e3/branches/sourcemm-1.4.x%40708 --- sourcemm/changelog.txt | 4 +++ sourcemm/sourcemm.cpp | 66 ++++++++++++++++++++++++++++-------------- 2 files changed, 49 insertions(+), 21 deletions(-) diff --git a/sourcemm/changelog.txt b/sourcemm/changelog.txt index 93e8a76..a630813 100644 --- a/sourcemm/changelog.txt +++ b/sourcemm/changelog.txt @@ -1,3 +1,7 @@ +2008/??/?? 1.4.5: + - Fixed amb1952: Crash when first plugin listed in metaplugins.ini had an alias + and was not on the first line of the file. + 2008/07/26 1.4.4: - Fixed a bug where loading plugins built for MM:S 1.3 or older (API ver <= 9) would cause a crash. diff --git a/sourcemm/sourcemm.cpp b/sourcemm/sourcemm.cpp index 5fa436d..53c1e53 100644 --- a/sourcemm/sourcemm.cpp +++ b/sourcemm/sourcemm.cpp @@ -826,21 +826,22 @@ int LoadPluginsFromFile(const char *_file) char buffer[255], error[255], full_path[255]; const char *ptr, *ext, *file; size_t length; - while (!feof(fp)) + while (!feof(fp) && fgets(buffer, sizeof(buffer), fp) != NULL) { - buffer[0] = '\0'; - fgets(buffer, sizeof(buffer), fp); - length = strlen(buffer); - if (!length) - continue; - if (buffer[length-1] == '\n') - buffer[--length] = '\0'; - UTIL_TrimLeft(buffer); UTIL_TrimRight(buffer); - if (buffer[0] == '\0' || buffer[0] == ';' || strncmp(buffer, "//", 2) == 0) + length = strlen(buffer); + if (!length) + { continue; + } + + if (buffer[0] == '\0' || buffer[0] == ';' || strncmp(buffer, "//", 2) == 0) + { + continue; + } + file = buffer; if (buffer[0] == '"') { @@ -856,7 +857,9 @@ int LoadPluginsFromFile(const char *_file) } cptr++; } - } else { + } + else + { char *cptr = buffer; while (*cptr) { @@ -864,7 +867,9 @@ int LoadPluginsFromFile(const char *_file) { char *optr = cptr; while (*cptr && isspace(*cptr)) + { cptr++; + } *optr = '\0'; UTIL_TrimRight(cptr); if (*cptr && isalpha(*cptr)) @@ -889,13 +894,21 @@ int LoadPluginsFromFile(const char *_file) if (id < Pl_MinId || g_PluginMngr.FindById(id)->m_Status < Pl_Paused) { LogMessage("[META] Failed to load plugin %s. %s", buffer, error); - } else { - if (already) - skipped++; - else - total++; } - } else { + else + { + if (already) + { + skipped++; + } + else + { + total++; + } + } + } + else + { /* Attempt to find a file extension */ ptr = UTIL_GetExtension(file); /* Add an extension if there's none there */ @@ -906,7 +919,9 @@ int LoadPluginsFromFile(const char *_file) #else ext = "_i486.so"; #endif - } else { + } + else + { ext = ""; } /* Format the new path */ @@ -915,11 +930,17 @@ int LoadPluginsFromFile(const char *_file) if (id < Pl_MinId || g_PluginMngr.FindById(id)->m_Status < Pl_Paused) { LogMessage("[META] Failed to load plugin %s. %s", buffer, error); - } else { + } + else + { if (already) + { skipped++; + } else + { total++; + } } } } @@ -928,13 +949,16 @@ int LoadPluginsFromFile(const char *_file) if (skipped) { LogMessage("[META] Loaded %d plugins from file (%d already loaded)", total, skipped); - } else { + } + else + { LogMessage("[META] Loaded %d plugins from file.", total); } - + return total; } + /* Wrapper function. This is called when the GameDLL thinks it's using * the engine's real engineFactory. */