diff options
author | Bastien Bouclet | 2017-08-29 21:34:51 +0200 |
---|---|---|
committer | Bastien Bouclet | 2017-09-12 20:25:24 +0200 |
commit | 8e235f07a762ea281d0ce366242522b84c518e3b (patch) | |
tree | 32cdc29bfcfe7cd622618bbff81d3f3d10250547 /engines/pegasus/input.cpp | |
parent | 731028460fe37f534118ba1d30380460f1f9de80 (diff) | |
download | scummvm-rg350-8e235f07a762ea281d0ce366242522b84c518e3b.tar.gz scummvm-rg350-8e235f07a762ea281d0ce366242522b84c518e3b.tar.bz2 scummvm-rg350-8e235f07a762ea281d0ce366242522b84c518e3b.zip |
PEGASUS: Disallow loading / saving from the GMM from inner loops
InputDeviceManager::pumpEvents is called from neighborhood classes that
are destroyed when loading.
Don't allow loading from that method to prevent use after free bugs.
Diffstat (limited to 'engines/pegasus/input.cpp')
-rw-r--r-- | engines/pegasus/input.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/engines/pegasus/input.cpp b/engines/pegasus/input.cpp index 47ec44a736..36a84dbd3c 100644 --- a/engines/pegasus/input.cpp +++ b/engines/pegasus/input.cpp @@ -223,10 +223,18 @@ bool InputDeviceManager::notifyEvent(const Common::Event &event) { } void InputDeviceManager::pumpEvents() { + PegasusEngine *vm = ((PegasusEngine *)g_engine); + + bool saveAllowed = vm->swapSaveAllowed(false); + bool openAllowed = vm->swapLoadAllowed(false); + // Just poll for events. notifyEvent() will pick up on them. Common::Event event; while (g_system->getEventManager()->pollEvent(event)) ; + + vm->swapSaveAllowed(saveAllowed); + vm->swapLoadAllowed(openAllowed); } int operator==(const Input &arg1, const Input &arg2) { |