summaryrefslogtreecommitdiff
path: root/sd
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-05-22 09:10:14 +0100
committerAndras Timar <andras.timar@collabora.com>2017-07-06 15:34:30 +0200
commit20a0569ae99fc1ef8537ed6b1819e233b5e2f244 (patch)
tree6fde5191d574140f2179bf6f54f96d95ffef1591 /sd
parent5eef53248781a97d83c9a639350c32859caa341b (diff)
Resolves: tdf#107959 SdrGrafObj leak triggers later crash
if the graphic doesn't change, then the cloned SdrGrafObj persists beyond stylesheet destruction and blows up Change-Id: I0013e7e118985c1334ab460507bc5c8271700160 (cherry picked from commit 118401aae4516bf4cc122e96b376d129ab3a3d5e) (cherry picked from commit e4db2fc10ba4447fa5393853d0cfed795b260f0b) Reviewed-on: https://gerrit.libreoffice.org/39261 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Stahl <mstahl@redhat.com> (cherry picked from commit c00af602013b840f4f92c15b259ce6cdeeaabcae)
Diffstat (limited to 'sd')
-rw-r--r--sd/source/ui/view/drviews6.cxx17
1 files changed, 7 insertions, 10 deletions
diff --git a/sd/source/ui/view/drviews6.cxx b/sd/source/ui/view/drviews6.cxx
index 1e137982404e..ec445e75fe37 100644
--- a/sd/source/ui/view/drviews6.cxx
+++ b/sd/source/ui/view/drviews6.cxx
@@ -276,20 +276,17 @@ void DrawViewShell::ExecBmpMask( SfxRequest& rReq )
if ( pObj && !mpDrawView->IsTextEdit() )
{
- SdrGrafObj* pNewObj = pObj->Clone();
+ std::unique_ptr<SdrGrafObj> xNewObj(pObj->Clone());
bool bCont = true;
- if( pNewObj->IsLinkedGraphic() )
+ if (xNewObj->IsLinkedGraphic())
{
ScopedVclPtrInstance< MessageDialog > aQueryBox( static_cast<vcl::Window*>(GetActiveWindow()),"QueryUnlinkImageDialog","modules/sdraw/ui/queryunlinkimagedialog.ui");
if (RET_YES == aQueryBox->Execute())
- pNewObj->ReleaseGraphicLink();
+ xNewObj->ReleaseGraphicLink();
else
- {
- delete pNewObj;
bCont = false;
- }
}
SfxChildWindow* pWnd = GetViewFrame()->GetChildWindow(
@@ -298,21 +295,21 @@ void DrawViewShell::ExecBmpMask( SfxRequest& rReq )
assert(pBmpMask);
if (bCont && pBmpMask)
{
- const Graphic& rOldGraphic = pNewObj->GetGraphic();
+ const Graphic& rOldGraphic = xNewObj->GetGraphic();
const Graphic aNewGraphic(pBmpMask->Mask(rOldGraphic));
if( aNewGraphic != rOldGraphic )
{
SdrPageView* pPV = mpDrawView->GetSdrPageView();
- pNewObj->SetEmptyPresObj( false );
- pNewObj->SetGraphic(pBmpMask->Mask(pNewObj->GetGraphic()));
+ xNewObj->SetEmptyPresObj(false);
+ xNewObj->SetGraphic(pBmpMask->Mask(xNewObj->GetGraphic()));
OUString aStr( mpDrawView->GetDescriptionOfMarkedObjects() );
aStr += " " + SD_RESSTR(STR_EYEDROPPER);
mpDrawView->BegUndo( aStr );
- mpDrawView->ReplaceObjectAtView( pObj, *pPV, pNewObj );
+ mpDrawView->ReplaceObjectAtView(pObj, *pPV, xNewObj.release());
mpDrawView->EndUndo();
}
}