diff options
author | Eugene Sandulenko | 2008-08-02 22:51:53 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2008-08-02 22:51:53 +0000 |
commit | 3047e084c1402af4f7643b718e655532c0e2c892 (patch) | |
tree | cc9b8208d1962675e755ecac8d5c203a193d7237 /engines/scumm/charset.cpp | |
parent | 9034ce2a7c5034d4864e1ae79e4cb28eeb602400 (diff) | |
download | scummvm-rg350-3047e084c1402af4f7643b718e655532c0e2c892.tar.gz scummvm-rg350-3047e084c1402af4f7643b718e655532c0e2c892.tar.bz2 scummvm-rg350-3047e084c1402af4f7643b718e655532c0e2c892.zip |
Fix for bug #1945335: "SCUMM: Invalid charset id can be stored".
Regressions possible.
svn-id: r33552
Diffstat (limited to 'engines/scumm/charset.cpp')
-rw-r--r-- | engines/scumm/charset.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/engines/scumm/charset.cpp b/engines/scumm/charset.cpp index e60c2f0a59..0728942671 100644 --- a/engines/scumm/charset.cpp +++ b/engines/scumm/charset.cpp @@ -277,7 +277,7 @@ CharsetRenderer::CharsetRenderer(ScummEngine *vm) { _disableOffsX = false; _vm = vm; - _curId = 0; + _curId = -1; } CharsetRenderer::~CharsetRenderer() { @@ -289,11 +289,15 @@ CharsetRendererCommon::CharsetRendererCommon(ScummEngine *vm) _shadowColor = 0; } -void CharsetRendererCommon::setCurID(byte id) { +void CharsetRendererCommon::setCurID(int32 id) { + if (id == -1) + return; + assertRange(0, id, _vm->_numCharsets - 1, "charset"); _curId = id; + debug(0, "boo %d", id); _fontPtr = _vm->getResourceAddress(rtCharset, id); if (_fontPtr == 0) error("CharsetRendererCommon::setCurID: charset %d not found!", id); @@ -308,7 +312,10 @@ void CharsetRendererCommon::setCurID(byte id) { _numChars = READ_LE_UINT16(_fontPtr + 2); } -void CharsetRendererV3::setCurID(byte id) { +void CharsetRendererV3::setCurID(int32 id) { + if (id == -1) + return; + assertRange(0, id, _vm->_numCharsets - 1, "charset"); _curId = id; @@ -668,7 +675,8 @@ void CharsetRenderer::translateColor() { void CharsetRenderer::saveLoadWithSerializer(Serializer *ser) { static const SaveLoadEntry charsetRendererEntries[] = { - MKLINE(CharsetRenderer, _curId, sleByte, VER(73)), + MKLINE_OLD(CharsetRenderer, _curId, sleByte, VER(73), VER(73)), + MKLINE(CharsetRenderer, _curId, sleInt32, VER(74)), MKLINE(CharsetRenderer, _color, sleByte, VER(73)), MKEND() }; @@ -988,7 +996,10 @@ CharsetRendererNut::~CharsetRendererNut() { } } -void CharsetRendererNut::setCurID(byte id) { +void CharsetRendererNut::setCurID(int32 id) { + if (id == -1) + return; + int numFonts = ((_vm->_game.id == GID_CMI) && (_vm->_game.features & GF_DEMO)) ? 4 : 5; assert(id < numFonts); _curId = id; |