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() )

Reply via email to