From 85ce13855746c2548343883e7d9efd16349875c2 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Sat, 28 Dec 2013 22:03:03 -0500 Subject: [PATCH] StyledEdit: Fix #10349. Override QuitRequested in FindWindow to notify the parent edit window of the find window's demise so it can reset its corresponding pointer. Otherwise the latter will potentially access the invalid pointer in question on subsequent find requests, leading to potential crashes. --- src/apps/stylededit/Constants.h | 1 + src/apps/stylededit/FindWindow.cpp | 10 ++++++++++ src/apps/stylededit/FindWindow.h | 1 + src/apps/stylededit/StyledEditWindow.cpp | 5 +++++ 4 files changed, 17 insertions(+) diff --git a/src/apps/stylededit/Constants.h b/src/apps/stylededit/Constants.h index 7cf1133795..2711073324 100644 --- a/src/apps/stylededit/Constants.h +++ b/src/apps/stylededit/Constants.h @@ -43,6 +43,7 @@ const uint32 MSG_SEARCH = 'msea'; const uint32 MSG_REPLACE = 'msre'; const uint32 MSG_REPLACE_ALL = 'mrea'; const uint32 MSG_HIDE_WINDOW = 'mhdw'; +const uint32 MSG_FIND_WINDOW_QUIT = 'mfwq'; // "Font"-menu const uint32 FONT_SIZE = 'FMsi'; diff --git a/src/apps/stylededit/FindWindow.cpp b/src/apps/stylededit/FindWindow.cpp index cde9f1f6c1..a8f4fc7d5b 100644 --- a/src/apps/stylededit/FindWindow.cpp +++ b/src/apps/stylededit/FindWindow.cpp @@ -110,6 +110,16 @@ FindWindow::DispatchMessage(BMessage* message, BHandler* handler) } +bool +FindWindow::QuitRequested() +{ + BMessenger messenger(fHandler); + messenger.SendMessage(MSG_FIND_WINDOW_QUIT); + + return true; +} + + void FindWindow::Show() { diff --git a/src/apps/stylededit/FindWindow.h b/src/apps/stylededit/FindWindow.h index f891bf57b6..c6a2e17e08 100644 --- a/src/apps/stylededit/FindWindow.h +++ b/src/apps/stylededit/FindWindow.h @@ -26,6 +26,7 @@ class FindWindow : public BWindow { virtual void MessageReceived(BMessage* message); virtual void DispatchMessage(BMessage* message, BHandler* handler); + virtual bool QuitRequested(); virtual void Show(); private: diff --git a/src/apps/stylededit/StyledEditWindow.cpp b/src/apps/stylededit/StyledEditWindow.cpp index 892702ced4..326ad1e9c7 100644 --- a/src/apps/stylededit/StyledEditWindow.cpp +++ b/src/apps/stylededit/StyledEditWindow.cpp @@ -254,6 +254,11 @@ StyledEditWindow::MessageReceived(BMessage* message) fFindWindow->Activate(); break; } + case MSG_FIND_WINDOW_QUIT: + { + fFindWindow = NULL; + break; + } case MSG_SEARCH: message->FindString("findtext", &fStringToFind); fFindAgainItem->SetEnabled(true);