aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/scene_lol.cpp
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2016-10-25 23:11:13 +0200
committerWillem Jan Palenstijn2016-10-25 23:13:22 +0200
commitb4515d087257e1ab27712dc1bffece3f1cd39391 (patch)
tree8d94107680250d9e77fd861266c610f9ef8514d6 /engines/kyra/scene_lol.cpp
parent97bc65e82f0f9efeb07d84a876ee2fd7f9b24780 (diff)
downloadscummvm-rg350-b4515d087257e1ab27712dc1bffece3f1cd39391.tar.gz
scummvm-rg350-b4515d087257e1ab27712dc1bffece3f1cd39391.tar.bz2
scummvm-rg350-b4515d087257e1ab27712dc1bffece3f1cd39391.zip
KYRA: (LOL) Fix buffer overflow in _lastOverridePalFile
It was storing filenames of length 12 in a char[12] buffer. Fixes bug #9627.
Diffstat (limited to 'engines/kyra/scene_lol.cpp')
-rw-r--r--engines/kyra/scene_lol.cpp14
1 files changed, 6 insertions, 8 deletions
diff --git a/engines/kyra/scene_lol.cpp b/engines/kyra/scene_lol.cpp
index 391de5e49c..a746080190 100644
--- a/engines/kyra/scene_lol.cpp
+++ b/engines/kyra/scene_lol.cpp
@@ -303,12 +303,10 @@ void LoLEngine::loadLevelGraphics(const char *file, int specialColor, int weight
_lastSpecialColor = specialColor;
_lastSpecialColorWeight = weight;
strcpy(_lastBlockDataFile, file);
- if (palFile) {
- strcpy(_lastOverridePalFile, palFile);
- _lastOverridePalFilePtr = _lastOverridePalFile;
- } else {
- _lastOverridePalFilePtr = 0;
- }
+ if (palFile)
+ _lastOverridePalFile = palFile;
+ else
+ _lastOverridePalFile.clear();
}
if (_flags.use16ColorMode) {
@@ -361,8 +359,8 @@ void LoLEngine::loadLevelGraphics(const char *file, int specialColor, int weight
memcpy(_vcnColTable, v, 128);
v += 128;
- if (_lastOverridePalFilePtr) {
- _res->loadFileToBuf(_lastOverridePalFilePtr, _screen->getPalette(0).getData(), 384);
+ if (!_lastOverridePalFile.empty()) {
+ _res->loadFileToBuf(_lastOverridePalFile.c_str(), _screen->getPalette(0).getData(), 384);
} else {
_screen->getPalette(0).copy(v, 0, 128);
}