aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/seg_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/seg_manager.cpp')
-rw-r--r--engines/sci/engine/seg_manager.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp
index 35a655fb4c..23d1942dd3 100644
--- a/engines/sci/engine/seg_manager.cpp
+++ b/engines/sci/engine/seg_manager.cpp
@@ -796,7 +796,7 @@ size_t SegManager::strlen(reg_t str) {
}
-Common::String SegManager::getString(reg_t pointer, int entries) {
+Common::String SegManager::getString(reg_t pointer) {
Common::String ret;
if (pointer.isNull())
return ret; // empty text
@@ -806,10 +806,7 @@ Common::String SegManager::getString(reg_t pointer, int entries) {
warning("SegManager::getString(): Attempt to dereference invalid pointer %04x:%04x", PRINT_REG(pointer));
return ret;
}
- if (entries > src_r.maxSize) {
- warning("Trying to dereference pointer %04x:%04x beyond end of segment", PRINT_REG(pointer));
- return ret;
- }
+
if (src_r.isRaw)
ret = (char *)src_r.raw;
else {
@@ -895,6 +892,11 @@ SciArray *SegManager::lookupArray(reg_t addr) {
}
void SegManager::freeArray(reg_t addr) {
+ // SSCI memory manager ignores attempts to free null handles
+ if (addr.isNull()) {
+ return;
+ }
+
if (_heap[addr.getSegment()]->getType() != SEG_TYPE_ARRAY)
error("Attempt to use non-array %04x:%04x as array", PRINT_REG(addr));