From fb9a5833d6c7f3cc8afd5741c0ede47edc1535d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Fri, 9 Oct 2015 17:02:56 +0200 Subject: [PATCH] Fix override offsets while loading LanguagePack When loading language pack, a check is made not to double entries. This check was wrong, because it tried to use offsets as pointers to strings. These offsets are later rewritten to actual pointers in remaining part of LanguagePack::LanguagePack --- src/core/StringBuilder.hpp | 2 +- src/localisation/LanguagePack.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/StringBuilder.hpp b/src/core/StringBuilder.hpp index 3c39617a4a..b92f4001b0 100644 --- a/src/core/StringBuilder.hpp +++ b/src/core/StringBuilder.hpp @@ -125,7 +125,7 @@ private: { if (_capacity > capacity) return; - _capacity = Math::Max(8U, _capacity); + _capacity = Math::Max((size_t)8, _capacity); while (_capacity < capacity) { _capacity *= 2; } diff --git a/src/localisation/LanguagePack.cpp b/src/localisation/LanguagePack.cpp index b4386129ed..4a532c3c82 100644 --- a/src/localisation/LanguagePack.cpp +++ b/src/localisation/LanguagePack.cpp @@ -187,7 +187,10 @@ LanguagePack::ScenarioOverride *LanguagePack::GetScenarioOverride(const utf8 *sc for (size_t i = 0; i < _scenarioOverrides.size(); i++) { ScenarioOverride *so = &_scenarioOverrides[i]; - if (_stricmp(so->name, scenarioIdentifier) == 0) { + // At this point ScenarioOverrides were not yet rewritten to point at + // strings, but rather still hold offsets from base. + const utf8 *name = _stringDataSB.GetBuffer() + (size_t)so->name; + if (_stricmp(name, scenarioIdentifier) == 0) { return so; } }