aboutsummaryrefslogtreecommitdiff
path: root/engines/sci
diff options
context:
space:
mode:
authorMartin Kiewitz2016-02-08 20:49:22 +0100
committerMartin Kiewitz2016-02-08 20:49:22 +0100
commit2a883bdd424a166215eeeecf6876ac1cc30fb8bd (patch)
treefdd4de068f6721d1a10268cb09dd5b6d8dd98077 /engines/sci
parent92f1062a3bd454f3a74d5f375512f7e071d198c0 (diff)
downloadscummvm-rg350-2a883bdd424a166215eeeecf6876ac1cc30fb8bd.tar.gz
scummvm-rg350-2a883bdd424a166215eeeecf6876ac1cc30fb8bd.tar.bz2
scummvm-rg350-2a883bdd424a166215eeeecf6876ac1cc30fb8bd.zip
SCI: Zero out dynamically allocated memory
Fixes Mixed Up Mother Goose SCI1.1 crash when saving And could potentially fix all sorts of other issues Original SCI only zeroed out heap on init.
Diffstat (limited to 'engines/sci')
-rw-r--r--engines/sci/engine/seg_manager.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp
index 23b1fdae23..8090b1861d 100644
--- a/engines/sci/engine/seg_manager.cpp
+++ b/engines/sci/engine/seg_manager.cpp
@@ -837,10 +837,13 @@ byte *SegManager::allocDynmem(int size, const char *descr, reg_t *addr) {
d._size = size;
- if (size == 0)
+ // Original SCI only zeroed out heap memory on initialize
+ // They didn't do it again for every allocation
+ if (size) {
+ d._buf = (byte *)calloc(size, 1);
+ } else {
d._buf = NULL;
- else
- d._buf = (byte *)malloc(size);
+ }
d._description = descr;