svx/source/unodraw/unoshape.cxx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-)
New commits: commit 876a433607831f5c82bb952582c151ac653841e7 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Tue Aug 14 21:05:16 2018 +0100 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Thu Aug 16 22:20:25 2018 +0200 Resolves: tdf#114427 crash when basic used to dispose shape Change-Id: Ia078a0f4262fbe18b6cf463dbff33df1d4fd0a95 Reviewed-on: https://gerrit.libreoffice.org/59037 Tested-by: Xisco Faulí <xiscofa...@libreoffice.org> Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx index 1ea93dde6d34..c1fc65092c6d 100644 --- a/svx/source/unodraw/unoshape.cxx +++ b/svx/source/unodraw/unoshape.cxx @@ -1339,37 +1339,38 @@ void SAL_CALL SvxShape::dispose() if ( HasSdrObject() ) { - EndListening( GetSdrObject()->getSdrModelFromSdrObject() ); + SdrObject* pObject = GetSdrObject(); + + EndListening( pObject->getSdrModelFromSdrObject() ); bool bFreeSdrObject = false; - if ( GetSdrObject()->IsInserted() && GetSdrObject()->GetPage() ) + if ( pObject->IsInserted() && pObject->GetPage() ) { OSL_ENSURE( HasSdrObjectOwnership(), "SvxShape::dispose: is the below code correct?" ); // normally, we are allowed to free the SdrObject only if we have its ownership. // Why isn't this checked here? - SdrPage* pPage = GetSdrObject()->GetPage(); + SdrPage* pPage = pObject->GetPage(); // delete the SdrObject from the page const size_t nCount = pPage->GetObjCount(); for ( size_t nNum = 0; nNum < nCount; ++nNum ) { - if ( pPage->GetObj( nNum ) == GetSdrObject() ) + if ( pPage->GetObj( nNum ) == pObject ) { - OSL_VERIFY( pPage->RemoveObject( nNum ) == GetSdrObject() ); + OSL_VERIFY( pPage->RemoveObject( nNum ) == pObject ); bFreeSdrObject = true; break; } } } - GetSdrObject()->setUnoShape(nullptr); + pObject->setUnoShape(nullptr); if ( bFreeSdrObject ) { // in case we have the ownership of the SdrObject, a Free // would do nothing. So ensure the ownership is reset. mpImpl->mbHasSdrObjectOwnership = false; - SdrObject* pObject = GetSdrObject(); SdrObject::Free( pObject ); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits