hrev46610 adds 1 changeset to branch 'master' old head: b998f9f02ffad9b683d9e66074d1a3a0510d301a new head: 85ce13855746c2548343883e7d9efd16349875c2 overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=85ce138+%5Eb998f9f ---------------------------------------------------------------------------- 85ce138: 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. [ Rene Gollent <rene@xxxxxxxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev46610 Commit: 85ce13855746c2548343883e7d9efd16349875c2 URL: http://cgit.haiku-os.org/haiku/commit/?id=85ce138 Author: Rene Gollent <rene@xxxxxxxxxxx> Date: Sun Dec 29 03:03:03 2013 UTC Ticket: https://dev.haiku-os.org/ticket/10349 ---------------------------------------------------------------------------- 4 files changed, 17 insertions(+) src/apps/stylededit/Constants.h | 1 + src/apps/stylededit/FindWindow.cpp | 10 ++++++++++ src/apps/stylededit/FindWindow.h | 1 + src/apps/stylededit/StyledEditWindow.cpp | 5 +++++ ---------------------------------------------------------------------------- diff --git a/src/apps/stylededit/Constants.h b/src/apps/stylededit/Constants.h index 7cf1133..2711073 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 cde9f1f..a8f4fc7 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 f891bf5..c6a2e17 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 892702c..326ad1e 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);