aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock/fixed_text.cpp
diff options
context:
space:
mode:
authorMartin Kiewitz2015-06-14 18:14:52 +0200
committerMartin Kiewitz2015-06-14 18:14:52 +0200
commit2d70a7af6ddbec99c87ed3885596b4b964cc58b1 (patch)
treefaccf4712119807c8a078d38b8c2e44d056954d1 /engines/sherlock/fixed_text.cpp
parent724fe7e4f68b796bd0e5b79cd28c873ba32cdff4 (diff)
downloadscummvm-rg350-2d70a7af6ddbec99c87ed3885596b4b964cc58b1.tar.gz
scummvm-rg350-2d70a7af6ddbec99c87ed3885596b4b964cc58b1.tar.bz2
scummvm-rg350-2d70a7af6ddbec99c87ed3885596b4b964cc58b1.zip
SHERLOCK: add boundary checks to fixed text class
for action strings
Diffstat (limited to 'engines/sherlock/fixed_text.cpp')
-rw-r--r--engines/sherlock/fixed_text.cpp39
1 files changed, 23 insertions, 16 deletions
diff --git a/engines/sherlock/fixed_text.cpp b/engines/sherlock/fixed_text.cpp
index 7594fc872b..2e0ae4a6fb 100644
--- a/engines/sherlock/fixed_text.cpp
+++ b/engines/sherlock/fixed_text.cpp
@@ -250,28 +250,31 @@ static const Common::String fixedTextES_ActionUse[] = {
"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[] = {
- { fixedTextEN_ActionOpen },
- { fixedTextEN_ActionClose },
- { fixedTextEN_ActionMove },
- { fixedTextEN_ActionPick },
- { fixedTextEN_ActionUse }
+ { FIXEDTEXT_ENTRY(fixedTextEN_ActionOpen) },
+ { FIXEDTEXT_ENTRY(fixedTextEN_ActionClose) },
+ { FIXEDTEXT_ENTRY(fixedTextEN_ActionMove) },
+ { FIXEDTEXT_ENTRY(fixedTextEN_ActionPick) },
+ { FIXEDTEXT_ENTRY(fixedTextEN_ActionUse) }
};
static const FixedTextActionEntry fixedTextDE_Actions[] = {
- { fixedTextDE_ActionOpen },
- { fixedTextDE_ActionClose },
- { fixedTextDE_ActionMove },
- { fixedTextDE_ActionPick },
- { fixedTextDE_ActionUse }
+ { FIXEDTEXT_ENTRY(fixedTextDE_ActionOpen) },
+ { FIXEDTEXT_ENTRY(fixedTextDE_ActionClose) },
+ { FIXEDTEXT_ENTRY(fixedTextDE_ActionMove) },
+ { FIXEDTEXT_ENTRY(fixedTextDE_ActionPick) },
+ { FIXEDTEXT_ENTRY(fixedTextDE_ActionUse) }
};
static const FixedTextActionEntry fixedTextES_Actions[] = {
- { fixedTextES_ActionOpen },
- { fixedTextES_ActionClose },
- { fixedTextES_ActionMove },
- { fixedTextES_ActionPick },
- { fixedTextES_ActionUse }
+ { FIXEDTEXT_ENTRY(fixedTextES_ActionOpen) },
+ { FIXEDTEXT_ENTRY(fixedTextES_ActionClose) },
+ { FIXEDTEXT_ENTRY(fixedTextES_ActionMove) },
+ { FIXEDTEXT_ENTRY(fixedTextES_ActionPick) },
+ { FIXEDTEXT_ENTRY(fixedTextES_ActionUse) }
};
// =========================================
@@ -307,7 +310,11 @@ const Common::String FixedText::getText(FixedTextId fixedTextId) {
const Common::String FixedText::getActionMessage(FixedTextActionId actionId, int messageIndex) {
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