From 319ff5745e1ccd17245cdb1840b387e80e7e3953 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Mon, 7 May 2012 12:23:09 +0000 Subject: [PATCH] Make wxDocTemplate::CreateDocument() exceptions-safe. Don't create the document object if InitDocument() throws. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71371 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/docview.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/common/docview.cpp b/src/common/docview.cpp index 0154cbdf1e..f44c05e7af 100644 --- a/src/common/docview.cpp +++ b/src/common/docview.cpp @@ -859,17 +859,19 @@ wxDocument *wxDocTemplate::CreateDocument(const wxString& path, long flags) bool wxDocTemplate::InitDocument(wxDocument* doc, const wxString& path, long flags) { + wxScopeGuard g = wxMakeObjGuard(*doc, &wxDocument::DeleteAllViews); + doc->SetFilename(path); doc->SetDocumentTemplate(this); GetDocumentManager()->AddDocument(doc); doc->SetCommandProcessor(doc->OnCreateCommandProcessor()); - if (doc->OnCreate(path, flags)) - return true; + if ( !doc->OnCreate(path, flags) ) + return false; - if (GetDocumentManager()->GetDocuments().Member(doc)) - doc->DeleteAllViews(); - return false; + g.Dismiss(); // no need to call DeleteAllViews() anymore + + return true; } wxView *wxDocTemplate::CreateView(wxDocument *doc, long flags) -- 2.50.0