aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/engine/klists.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/engines/sci/engine/klists.cpp b/engines/sci/engine/klists.cpp
index 2188087b8c..ca23469e44 100644
--- a/engines/sci/engine/klists.cpp
+++ b/engines/sci/engine/klists.cpp
@@ -702,9 +702,12 @@ reg_t kArray(EngineState *s, int argc, reg_t *argv) {
// Not implemented in SSCI
return s->r_acc;
case 8: { // Dup
- SciArray<reg_t> *array = s->_segMan->lookupArray(argv[1]);
reg_t arrayHandle;
SciArray<reg_t> *dupArray = s->_segMan->allocateArray(&arrayHandle);
+ // This must occur after allocateArray, as inserting a new object
+ // in the heap object list might invalidate this pointer. Also refer
+ // to the same issue in kClone()
+ SciArray<reg_t> *array = s->_segMan->lookupArray(argv[1]);
dupArray->setType(array->getType());
dupArray->setSize(array->getSize());