sw/source/core/draw/dview.cxx | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-)
New commits: commit 0627386e924279e1de75210cf6b144303fccbe7f Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Mon Apr 29 09:54:12 2024 +0200 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Mon Apr 29 15:42:25 2024 +0200 Fix UBSan failure Introduced by 495b5db74f0db59395ff68bacc8d8ca67595b66e "sw: check GetUserCall" https://ci.libreoffice.org/job/lo_ubsan/3154/consoleFull#-1571115798d893063f-7f3d-4b7e-b56f-4e0f225817cd Change-Id: Ifc80312890f2e6b82dcc9419b5b7e8bfcd5340a5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166824 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sw/source/core/draw/dview.cxx b/sw/source/core/draw/dview.cxx index d95dc0d17af9..de84660ca94a 100644 --- a/sw/source/core/draw/dview.cxx +++ b/sw/source/core/draw/dview.cxx @@ -708,13 +708,10 @@ const SwFrame* SwDrawView::CalcAnchor() return nullptr; SdrObject* pObj = rMrkList.GetMark( 0 )->GetMarkedSdrObj(); - SwDrawContact* pContact = static_cast<SwDrawContact*>(GetUserCall(pObj)); - if (!pContact) - return nullptr; //Search for paragraph bound objects, otherwise only the //current anchor. Search only if we currently drag. - const SwFrame* pAnch; + const SwFrame* pAnch = nullptr; tools::Rectangle aMyRect; auto pFlyDrawObj = dynamic_cast<SwVirtFlyDrawObj *>( pObj ); if ( pFlyDrawObj ) @@ -726,13 +723,16 @@ const SwFrame* SwDrawView::CalcAnchor() { // determine correct anchor position for 'virtual' drawing objects. // #i26791# - pAnch = pContact->GetAnchorFrame( pObj ); - if( !pAnch ) + if (SwDrawContact* pContact = static_cast<SwDrawContact*>(GetUserCall(pObj))) { - pContact->ConnectToLayout(); - // determine correct anchor position for 'virtual' drawing objects. - // #i26791# pAnch = pContact->GetAnchorFrame( pObj ); + if( !pAnch ) + { + pContact->ConnectToLayout(); + // determine correct anchor position for 'virtual' drawing objects. + // #i26791# + pAnch = pContact->GetAnchorFrame( pObj ); + } } aMyRect = pObj->GetSnapRect(); } @@ -767,11 +767,14 @@ const SwFrame* SwDrawView::CalcAnchor() { const SwRect aRect( aPt.getX(), aPt.getY(), 1, 1 ); - if ( pContact->GetAnchorFrame( pObj ) && - pContact->GetAnchorFrame( pObj )->IsPageFrame() ) - pAnch = pContact->GetPageFrame(); - else - pAnch = pContact->FindPage( aRect ); + if (SwDrawContact* pContact = static_cast<SwDrawContact*>(GetUserCall(pObj))) + { + if ( pContact->GetAnchorFrame( pObj ) && + pContact->GetAnchorFrame( pObj )->IsPageFrame() ) + pAnch = pContact->GetPageFrame(); + else + pAnch = pContact->FindPage( aRect ); + } } } if( pAnch && !pAnch->IsProtected() )