aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Snover2017-11-17 19:17:01 -0600
committerEugene Sandulenko2017-11-18 22:35:12 +0100
commitd0efcb7ad54fab6c9192ef099c400fc217644493 (patch)
treea6e152dff05a197b35e465754ab959a710f086d9
parent8808817d56d37a66eb6a590715035076fcc14ade (diff)
downloadscummvm-rg350-d0efcb7ad54fab6c9192ef099c400fc217644493.tar.gz
scummvm-rg350-d0efcb7ad54fab6c9192ef099c400fc217644493.tar.bz2
scummvm-rg350-d0efcb7ad54fab6c9192ef099c400fc217644493.zip
FULLPIPE: Fix use-after-free in ModalMainMenu
Pointers to objects which are invalidated when the scene gets unloaded may continue to be accessed if a mouse hover event is dispatched to the ModalMainMenu.
-rw-r--r--engines/fullpipe/modal.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/engines/fullpipe/modal.cpp b/engines/fullpipe/modal.cpp
index a513cd405c..e3d0ee0fe1 100644
--- a/engines/fullpipe/modal.cpp
+++ b/engines/fullpipe/modal.cpp
@@ -1338,6 +1338,9 @@ bool ModalMainMenu::handleMessage(ExCommand *message) {
if (message->_messageKind != 17)
return false;
+ if (!_scene)
+ return false;
+
Common::Point point;
if (message->_messageNum == 29) {
@@ -1412,6 +1415,7 @@ bool ModalMainMenu::init(int counterdiff) {
case PIC_MNU_DEBUG_L:
g_fp->_gameLoader->unloadScene(SC_MAINMENU);
+ _scene = nullptr;
g_fp->_sceneRect = _screct;
if (!g_fp->_currentScene)
@@ -1427,6 +1431,7 @@ bool ModalMainMenu::init(int counterdiff) {
case PIC_MNU_CONTINUE_L:
if (!_mfield_34) {
g_fp->_gameLoader->unloadScene(SC_MAINMENU);
+ _scene = nullptr;
g_fp->_sceneRect = _screct;
if (g_fp->_currentScene) {