From 8b13a9e80caeccc61f1e8409a092d5b96cf1ce2a Mon Sep 17 00:00:00 2001 From: Ted John Date: Tue, 26 Apr 2016 18:45:51 +0100 Subject: [PATCH] add warnings for when override string limit is reached --- src/localisation/LanguagePack.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/localisation/LanguagePack.cpp b/src/localisation/LanguagePack.cpp index cccce403db..0011185b8e 100644 --- a/src/localisation/LanguagePack.cpp +++ b/src/localisation/LanguagePack.cpp @@ -15,6 +15,8 @@ extern "C" // Don't try to load more than language files that exceed 64 MiB constexpr uint64 MAX_LANGUAGE_SIZE = 64 * 1024 * 1024; +constexpr uint64 MAX_OBJECT_OVERRIDES = 4096; +constexpr uint64 MAX_SCENARIO_OVERRIDES = 4096; constexpr rct_string_id ObjectOverrideBase = 0x6000; constexpr int ObjectOverrideMaxStringCount = 4; @@ -381,6 +383,11 @@ void LanguagePack::ParseGroupObject(IStringReader * reader) _currentScenarioOverride = nullptr; if (_currentObjectOverride == nullptr) { + if (_objectOverrides.size() == MAX_OBJECT_OVERRIDES) + { + log_warning("Maximum number of localised object strings exceeded."); + } + _objectOverrides.push_back(ObjectOverride()); _currentObjectOverride = &_objectOverrides[_objectOverrides.size() - 1]; memset(_currentObjectOverride, 0, sizeof(ObjectOverride)); @@ -422,6 +429,11 @@ void LanguagePack::ParseGroupScenario(IStringReader * reader) _currentScenarioOverride = GetScenarioOverride(_currentGroup); if (_currentScenarioOverride == nullptr) { + if (_scenarioOverrides.size() == MAX_SCENARIO_OVERRIDES) + { + log_warning("Maximum number of scenario strings exceeded."); + } + _scenarioOverrides.push_back(ScenarioOverride()); _currentScenarioOverride = &_scenarioOverrides[_scenarioOverrides.size() - 1]; Memory::Set(_currentScenarioOverride, 0, sizeof(ScenarioOverride));