From 14d6187a02ba77f0941c0c9a4df4fd4a7826db6c Mon Sep 17 00:00:00 2001 From: Brian Potchik Date: Wed, 20 Apr 2022 10:37:14 -0400 Subject: Fix initial navigation crash and object lifetime. --- ui/viewframe.h | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/ui/viewframe.h b/ui/viewframe.h index 28691d0a..b8707d8b 100644 --- a/ui/viewframe.h +++ b/ui/viewframe.h @@ -96,14 +96,6 @@ class TransformParameterDialog; class ViewPaneHeaderSubtypeWidget; // struct BinaryNinjaCore::LinearDisassemblyLine; -class View; -class InitialNavigation: public BinaryNinja::BinaryDataNotification -{ - View* m_view; - public: - InitialNavigation(View* view); - virtual void OnSymbolAdded(BinaryNinja::BinaryView* view, BinaryNinja::Symbol* symbol) override; -}; class BINARYNINJAUIAPI View { @@ -329,8 +321,25 @@ class BINARYNINJAUIAPI ViewContainer }; class SymbolsView; +class ViewFrame; class ViewPane; + +class InitialNavigation: public BinaryNinja::BinaryDataNotification +{ + ViewFrame* m_frame; + BinaryViewRef m_data; + + InitialNavigation() = delete; + +public: + InitialNavigation(ViewFrame* frame, BinaryViewRef data) : m_frame(frame), m_data(data) { m_data->RegisterNotification(this); } + ~InitialNavigation() { m_data->UnregisterNotification(this); } + + virtual void OnSymbolAdded(BinaryNinja::BinaryView* view, BinaryNinja::Symbol* symbol) override; +}; + + class BINARYNINJAUIAPI ViewFrame : public QWidget { Q_OBJECT @@ -342,7 +351,7 @@ class BINARYNINJAUIAPI ViewFrame : public QWidget FileContext* m_context; bool m_fileContentsLock = true; // file contents protection from accidental modification in the UI - BinaryViewRef m_data; + BinaryViewRef m_data = nullptr; QWidget* m_view = nullptr; QWidget* m_viewContainer; QVBoxLayout* m_viewLayout; @@ -352,7 +361,7 @@ class BINARYNINJAUIAPI ViewFrame : public QWidget bool m_graphViewPreferred = false; std::vector m_viewTypePriority; int m_preferredSyncGroup = 1; - InitialNavigation* m_initialNavigation; + InitialNavigation* m_initialNavigation = nullptr; UIActionHandler m_actionHandler; @@ -497,7 +506,6 @@ class BINARYNINJAUIAPI ViewFrame : public QWidget void forceSyncFromView(); ViewFrame* getOtherPane(); - void UnRegisterInitialNavigation(); public Q_SLOTS: virtual void assemble(); -- cgit v1.3.1