aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/engine/kernel32.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/engines/sci/engine/kernel32.cpp b/engines/sci/engine/kernel32.cpp
index b132543206..e093fa6fdf 100644
--- a/engines/sci/engine/kernel32.cpp
+++ b/engines/sci/engine/kernel32.cpp
@@ -524,8 +524,16 @@ reg_t kString(EngineState *s, int argc, reg_t *argv) {
}
case 1: // Size
return make_reg(0, s->_segMan->getString(argv[1]).size());
- case 2: // At (return value at an index)
- return make_reg(0, s->_segMan->getString(argv[1])[argv[2].toUint16()]);
+ case 2: { // At (return value at an index)
+ Common::String string = s->_segMan->getString(argv[1]);
+
+ if (argv[2].toUint16() >= string.size()) {
+ warning("kString(At): Out of bounds: %d/%d\n", argv[2].toUint16(), string.size());
+ return NULL_REG;
+ }
+
+ return make_reg(0, string[argv[2].toUint16()]);
+ }
case 3: { // Atput (put value at an index)
SciString *string = s->_segMan->lookupString(argv[1]);