Fix for bug #1945335: "SCUMM: Invalid charset id can be stored".

Regressions possible.

svn-id: r33552
This commit is contained in:
Eugene Sandulenko 2008-08-02 22:51:53 +00:00
parent 9034ce2a7c
commit 3047e084c1
4 changed files with 25 additions and 14 deletions

View file

@ -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;