From e4cea7f3cae61f0f3f3d53e724d0642aad6cba1e Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 24 May 2018 19:37:16 +0200 Subject: [PATCH] fix possible stack overflow when finishing edit mode --- src/Gui/Document.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index d79983d551..fcf66ac9ed 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -264,10 +264,15 @@ void Document::resetEdit(void) activeView->getViewer()->resetEditingViewProvider(); } - d->_editViewProvider->finishEditing(); - if (d->_editViewProvider->isDerivedFrom(ViewProviderDocumentObject::getClassTypeId())) - signalResetEdit(*(static_cast(d->_editViewProvider))); - d->_editViewProvider = 0; + // Nullify the member variable before calling finishEditing(). + // This is to avoid a possible stack overflow when a view provider wrongly + // invokes the document's resetEdit() method. + ViewProvider* editViewProvider = d->_editViewProvider; + d->_editViewProvider = nullptr; + + editViewProvider->finishEditing(); + if (editViewProvider->isDerivedFrom(ViewProviderDocumentObject::getClassTypeId())) + signalResetEdit(*(static_cast(editViewProvider))); } }