From 071763d464285d5aec5b352a75e20d4dc923d6b1 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 13 Sep 2017 15:11:29 +0200 Subject: [PATCH] fix access of dangling pointer (in case undo/redo is off) use unique_ptr to delete object before leaving remoObject --- src/App/Document.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/App/Document.cpp b/src/App/Document.cpp index bf31f50882..3359b21dd1 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -2641,6 +2641,7 @@ void Document::remObject(const char* sName) } // do no transactions if we do a rollback! + std::unique_ptr tobedestroyed; if (!d->rollback) { // Undo stuff if (d->activeUndoTransaction) { @@ -2648,8 +2649,9 @@ void Document::remObject(const char* sName) d->activeUndoTransaction->addObjectNew(pos->second); } else { - // if not saved in undo -> delete object - delete pos->second; + // if not saved in undo -> delete object later + std::unique_ptr delobj(pos->second); + tobedestroyed.swap(delobj); } } @@ -2659,9 +2661,6 @@ void Document::remObject(const char* sName) break; } } - // remove from adjancy list - //remove_vertex(_DepConMap[pos->second],_DepList); - //_DepConMap.erase(pos->second); pos->second->setStatus(ObjectStatus::Delete, false); // Unset the bit to be on the safe side d->objectMap.erase(pos);