sw/source/core/crsr/swcrsr.cxx |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

New commits:
commit 2b96107a19177e0cf3561b32b2431cfed9615437
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Sat May 10 12:30:29 2025 +0100
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Sat May 10 20:47:24 2025 +0200

    crash with apparent SwNoTextFrame* cast to SwTextFrame*
    
     #0  __gnu_cxx::__normal_iterator<sw::Extent const*, 
std::vector<sw::Extent, std::allocator<sw::Extent> > >::__normal_iterator 
(__i=<error reading variable>,
         this=<optimized out>) at 
/opt/rh/devtoolset-12/root/usr/include/c++/12/bits/stl_iterator.h:1072
     #1  std::vector<sw::Extent, std::allocator<sw::Extent> >::begin 
(this=0x22) at 
/opt/rh/devtoolset-12/root/usr/include/c++/12/bits/stl_vector.h:879
     #2  sw::MapModelToView (rMerged=..., pNode=0x0, nIndex=0)
         at sw/source/core/text/txtfrm.cxx:1315
     #3  0x00007ff57a86ec75 in SwTextFrame::MapModelToView (this=<optimized 
out>, pNode=<optimized out>, nIndex=<optimized out>)
         at sw/source/core/text/txtfrm.cxx:1384
     #4  0x00007ff57a86ec9f in SwTextFrame::MapModelToViewPos 
(this=this@entry=0x37d909a0, rPos=...)
         at sw/source/core/text/txtfrm.cxx:1396
     #5  0x00007ff57a426543 in SwCursor::LeftRight(bool, unsigned short, 
SwCursorSkipMode, bool, bool, bool, SwRootFrame const*, bool) ()
         at sw/source/core/crsr/swcrsr.cxx:1776
     #6  0x00007ff57a3fafe4 in SwCursorShell::LeftRight(bool, unsigned short, 
SwCursorSkipMode, bool) ()
         at sw/inc/crsrsh.hxx:495
     #7  0x00007ff57a627a7a in SwCursorShell::Right (bAllowVisual=false, 
nMode=SwCursorSkipMode::Chars, nCnt=1, this=0x37d51780)
         at sw/inc/crsrsh.hxx:379
     #8  SwEditShell::SetExtTextInputData(CommandExtTextInputData const&) ()
         at sw/source/core/edit/editsh.cxx:1019
     #9  0x00007ff57ad8bd9d in SwEditWin::Command(CommandEvent const&) ()
         at sw/source/uibase/docvw/edtwin.c
    
    (gdb) print *this
    $28 = {<SwContentFrame> = {<SwFrame> = {<SwFrameAreaDefinition> = 
{_vptr.SwFrameAreaDefinition = 0x7ff57b3f0340 <vtable for SwNoTextFrame+16>, 
maFrameArea = {
              m_Point = {<PointTemplate<Point, Size>> = {<PointTemplateBase> = 
{<Pair> = {mnA = 1418, mnB = 1418}, <No data fields>}, <No data fields>}, <No 
data fields>},
              m_Size = {<SizeTemplate<Size>> = {<SizeTemplateBase> = {<Pair> = 
{mnA = 9972, mnB = 5496}, <No data fields>}, <No data fields>}, <No data 
fields>}},
            maFramePrintArea = {m_Point = {<PointTemplate<Point, Size>> = 
{<PointTemplateBase> = {<Pair> = {mnA = 0,
                      mnB = 0}, <No data fields>}, <No data fields>}, <No data 
fields>}, m_Size = {<SizeTemplate<Size>> = {<SizeTemplateBase> = {<Pair> = {mnA 
= 9972,
                      mnB = 5496}, <No data fields>}, <No data fields>}, <No 
data fields>}}, mnFrameId = 24, mbFrameAreaPositionValid = true, 
mbFrameAreaSizeValid = true,
            mbFramePrintAreaValid = true, static snLastFrameId = 31}, 
<SwClient> = {<sw::WriterListener> = {
              _vptr.WriterListener = 0x7ff57b3f04a0 <vtable for 
SwNoTextFrame+368>, m_pLeft = 0x0, m_pRight = 0x37d51910},
            m_pRegisteredIn = 0x37c42a20}, <SfxBroadcaster> = 
{_vptr.SfxBroadcaster = 0x7ff57b3f04f0 <vtable for SwNoTextFrame+448>,
            m_RemovedPositions = std::vector of length 0, capacity 0, 
m_Listeners = std::vector of length 0, capacity 0}, static spCache = 
0x3780e4d0, mpRoot = 0x37b49ba0,
          mpUpper = 0x37c33460, mpNext = 0x0, mpPrev = 0x0, Python Exception 
<class 'ValueError'> Unsupported implementation for unique_ptr: 
std::__uniq_ptr_data<SwSortedObjs, std::default_delete<SwSortedObjs>, true, 
true>:
    m_pDrawObjs = {_M_t = {<std::__uniq_ptr_impl<SwSortedObjs, 
std::default_delete<SwSortedObjs> >> = {
                _M_t = std::tuple containing = {[1] = 0x0, [2] = {<No data 
fields>}}}, <No data fields>}}, mnFrameType = SwFrameType::NoTxt, mbInDtor = 
false,
          mbInvalidR2L = false, mbDerivedR2L = true, mbRightToLeft = false, 
mbInvalidVert = false, mbDerivedVert = true, mbVertical = false, mbVertLR = 
false,
          mbVertLRBT = false, mbValidLineNum = false, mbFixSize = false, 
mbCompletePaint = false, mbRetouche = false, mbInfInvalid = false, mbInfBody = 
false,
          mbInfTab = false, mbInfFly = true, mbInfFootnote = false, mbInfSct = 
false, mbColLocked = false, m_isInDestroy = false, mnForbidDelete = 0}, 
<SwFlowFrame> = {
          _vptr.SwFlowFrame = 0x7ff57b3f0518 <vtable for SwNoTextFrame+488>, 
m_rThis = @0x37d909a0, static s_bMoveBwdJump = false, m_pFollow = 0x0, 
m_pPrecede = 0x0,
          m_bLockJoin = false, m_bUndersized = false, m_bFlyLock = false}, <No 
data fields>}, static s_pTextCache = 0x3780fd60, mnAllLines = 0, mnThisLines = 
0,
      mnFlyAnchorOfst = 0, mnFlyAnchorOfstNoWrap = 939852432, 
mnFlyAnchorVertOfstNoWrap = 49, mnFootnoteLine = 940845376, mnHeightOfLastLine 
= 954225152,
      mnAdditionalFirstLineOffset = 954225136, Python Exception <class 
'ValueError'> Unsupported implementation for unique_ptr: 
std::__uniq_ptr_data<sw::MergedPara, std::default_delete<sw::MergedPara>, true, 
true>:
    m_pMergedPara = {_M_t = {<std::__uniq_ptr_impl<sw::MergedPara, 
std::default_delete<sw::MergedPara> >> = {
            _M_t = std::tuple containing = {[1] = 0x2, [2] = {<No data 
fields>}}}, <No data fields>}}, mnOffset = {m_value = 1750611950}, mnCacheIndex 
= 32757,
      mbLocked = false, mbWidow = false, mbJustWidow = false, mbEmpty = false, 
mbInFootnoteConnect = false, mbFootnote = false, mbRepaint = false,
      mbHasRotatedPortions = false, mbFieldFollow = false, mbHasAnimation = 
false, mbIsSwapped = false, mbFollowFormatAllowed = false}
    
    Change-Id: I936dc000deb297a5d98b088e46399ec3563c57e7
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185134
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>
    Tested-by: Jenkins

diff --git a/sw/source/core/crsr/swcrsr.cxx b/sw/source/core/crsr/swcrsr.cxx
index c66a9f606a27..0be9e3ba80a9 100644
--- a/sw/source/core/crsr/swcrsr.cxx
+++ b/sw/source/core/crsr/swcrsr.cxx
@@ -1736,19 +1736,19 @@ SwCursor::DoSetBidiLevelLeftRight(
 
 static const SwTextFrame* GetTextFrame(const SwNode& rNode, SwRootFrame 
const*const pLayout)
 {
-    SwTextFrame const* pFrame(nullptr);
+    SwContentFrame const* pFrame(nullptr);
     if (pLayout)
     {
-        pFrame = static_cast<SwTextFrame const 
*>(rNode.GetContentNode()->getLayoutFrame(pLayout));
+        pFrame = rNode.GetContentNode()->getLayoutFrame(pLayout);
         if (pFrame)
         {
             while (pFrame->GetPrecede())
             {
-                pFrame = static_cast<SwTextFrame const*>(pFrame->GetPrecede());
+                pFrame = static_cast<SwContentFrame 
const*>(pFrame->GetPrecede());
             }
         }
     }
-    return pFrame;
+    return pFrame ? pFrame->DynCastTextFrame() : nullptr;
 }
 
 bool SwCursor::LeftRight( bool bLeft, sal_uInt16 nCnt, SwCursorSkipMode nMode,

Reply via email to