From a4db376caae2083d6867ba4c2f5fb6fe423242da Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 3 Aug 2015 11:32:15 -0400 Subject: [PATCH] Tracker: Fix crash when the VirtualDirectoryWindow can't create the PoseView. Fixes #11859. We may want to show an error message rather than failing silently, but at least that is better than crashing. --- src/kits/tracker/ContainerWindow.cpp | 2 +- src/kits/tracker/Tracker.cpp | 6 ++++++ src/kits/tracker/VirtualDirectoryWindow.cpp | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/kits/tracker/ContainerWindow.cpp b/src/kits/tracker/ContainerWindow.cpp index 808e95717c..4cb4308c0a 100644 --- a/src/kits/tracker/ContainerWindow.cpp +++ b/src/kits/tracker/ContainerWindow.cpp @@ -1200,7 +1200,7 @@ BContainerWindow::SaveState(BMessage& message) const bool BContainerWindow::StateNeedsSaving() const { - return fStateNeedsSaving || PoseView()->StateNeedsSaving(); + return fPoseView != NULL && (fStateNeedsSaving || fPoseView->StateNeedsSaving()); } diff --git a/src/kits/tracker/Tracker.cpp b/src/kits/tracker/Tracker.cpp index fd2e0f4996..e5426cef32 100644 --- a/src/kits/tracker/Tracker.cpp +++ b/src/kits/tracker/Tracker.cpp @@ -1113,6 +1113,12 @@ TTracker::OpenContainerWindow(Model* model, BMessage* originalRefsList, if (model != NULL && window->LockLooper()) { window->CreatePoseView(model); + if (window->PoseView() == NULL) { + // Failed initialization. + window->PostMessage(B_QUIT_REQUESTED); + window->UnlockLooper(); + return; + } window->UnlockLooper(); } diff --git a/src/kits/tracker/VirtualDirectoryWindow.cpp b/src/kits/tracker/VirtualDirectoryWindow.cpp index 985bcc3f2b..40e361bfd8 100644 --- a/src/kits/tracker/VirtualDirectoryWindow.cpp +++ b/src/kits/tracker/VirtualDirectoryWindow.cpp @@ -76,6 +76,8 @@ void VirtualDirectoryWindow::CreatePoseView(Model* model) { fPoseView = NewPoseView(model, kListMode); + if (fPoseView == NULL) + return; fBorderedView->GroupLayout()->AddView(fPoseView); fBorderedView->EnableBorderHighlight(false);