SHERLOCK: add boundary checks to fixed text class

for action strings
This commit is contained in:
Martin Kiewitz 2015-06-14 18:14:52 +02:00
parent 724fe7e4f6
commit 2d70a7af6d
2 changed files with 24 additions and 16 deletions

View file

@ -250,28 +250,31 @@ static const Common::String fixedTextES_ActionUse[] = {
"Las puertas no fuman" "Las puertas no fuman"
}; };
#define FIXEDTEXT_GETCOUNT(_name_) sizeof(_name_) / sizeof(Common::String)
#define FIXEDTEXT_ENTRY(_name_) _name_, FIXEDTEXT_GETCOUNT(_name_)
static const FixedTextActionEntry fixedTextEN_Actions[] = { static const FixedTextActionEntry fixedTextEN_Actions[] = {
{ fixedTextEN_ActionOpen }, { FIXEDTEXT_ENTRY(fixedTextEN_ActionOpen) },
{ fixedTextEN_ActionClose }, { FIXEDTEXT_ENTRY(fixedTextEN_ActionClose) },
{ fixedTextEN_ActionMove }, { FIXEDTEXT_ENTRY(fixedTextEN_ActionMove) },
{ fixedTextEN_ActionPick }, { FIXEDTEXT_ENTRY(fixedTextEN_ActionPick) },
{ fixedTextEN_ActionUse } { FIXEDTEXT_ENTRY(fixedTextEN_ActionUse) }
}; };
static const FixedTextActionEntry fixedTextDE_Actions[] = { static const FixedTextActionEntry fixedTextDE_Actions[] = {
{ fixedTextDE_ActionOpen }, { FIXEDTEXT_ENTRY(fixedTextDE_ActionOpen) },
{ fixedTextDE_ActionClose }, { FIXEDTEXT_ENTRY(fixedTextDE_ActionClose) },
{ fixedTextDE_ActionMove }, { FIXEDTEXT_ENTRY(fixedTextDE_ActionMove) },
{ fixedTextDE_ActionPick }, { FIXEDTEXT_ENTRY(fixedTextDE_ActionPick) },
{ fixedTextDE_ActionUse } { FIXEDTEXT_ENTRY(fixedTextDE_ActionUse) }
}; };
static const FixedTextActionEntry fixedTextES_Actions[] = { static const FixedTextActionEntry fixedTextES_Actions[] = {
{ fixedTextES_ActionOpen }, { FIXEDTEXT_ENTRY(fixedTextES_ActionOpen) },
{ fixedTextES_ActionClose }, { FIXEDTEXT_ENTRY(fixedTextES_ActionClose) },
{ fixedTextES_ActionMove }, { FIXEDTEXT_ENTRY(fixedTextES_ActionMove) },
{ fixedTextES_ActionPick }, { FIXEDTEXT_ENTRY(fixedTextES_ActionPick) },
{ fixedTextES_ActionUse } { FIXEDTEXT_ENTRY(fixedTextES_ActionUse) }
}; };
// ========================================= // =========================================
@ -307,7 +310,11 @@ const Common::String FixedText::getText(FixedTextId fixedTextId) {
const Common::String FixedText::getActionMessage(FixedTextActionId actionId, int messageIndex) { const Common::String FixedText::getActionMessage(FixedTextActionId actionId, int messageIndex) {
assert(actionId >= 0); assert(actionId >= 0);
return _curLanguageEntry->actionArray[actionId].fixedTextArray[messageIndex]; assert(messageIndex >= 0);
const FixedTextActionEntry *curActionEntry = &_curLanguageEntry->actionArray[actionId];
assert(messageIndex < curActionEntry->fixedTextArrayCount);
return curActionEntry->fixedTextArray[messageIndex];
} }
} // End of namespace Sherlock } // End of namespace Sherlock

View file

@ -69,6 +69,7 @@ enum FixedTextActionId {
struct FixedTextActionEntry { struct FixedTextActionEntry {
const Common::String *fixedTextArray; const Common::String *fixedTextArray;
int fixedTextArrayCount;
}; };
struct FixedTextLanguageEntry { struct FixedTextLanguageEntry {