sw/source/core/undo/rolbck.cxx |   12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

New commits:
commit 6d5f215993bf48536f5598133e56ae23e69bd662
Author:     Ashod Nakashian <ashod.nakash...@collabora.co.uk>
AuthorDate: Wed Jan 15 07:57:08 2025 -0500
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Tue Jan 21 08:42:48 2025 +0100

    sw: safer SwHistoryBookmark::SetInDoc()
    
    SIGSEGV code: 1 for address: 0x0
            #0  0x00007fdc975f3df8 _ZN17SwHistoryBookmark8SetInDocEP5SwDocb 
(libswlo.so + 0x9f3df8)
            #1  0x00007fdc975efe6b _ZN9SwHistory8RollbackEP5SwDoct (libswlo.so 
+ 0x9efe6b)
            #2  0x00007fdc9760088e 
_ZN12SwUndoDelete8UndoImplERN2sw15UndoRedoContextE (libswlo.so + 0xa0088e)
            #3  0x00007fdc97602604 
_ZN6SwUndo15UndoWithContextER14SfxUndoContext (libswlo.so + 0xa02604)
            #4  0x00007fdca41f8789 
_ZN14SfxUndoManager8ImplUndoEP14SfxUndoContext (libmergedlo.so + 0x29f8789)
    
    Signed-off-by: Ashod Nakashian <ashod.nakash...@collabora.co.uk>
    Change-Id: Idb31c8815cd582eb15e7db68d0086bea87c2a823
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180455
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/sw/source/core/undo/rolbck.cxx b/sw/source/core/undo/rolbck.cxx
index 426be22dcc25..d59ec1a330ba 100644
--- a/sw/source/core/undo/rolbck.cxx
+++ b/sw/source/core/undo/rolbck.cxx
@@ -643,7 +643,7 @@ void SwHistoryBookmark::SetInDoc( SwDoc* pDoc, bool )
 {
     ::sw::UndoGuard const undoGuard(pDoc->GetIDocumentUndoRedo());
 
-    SwNodes& rNds = pDoc->GetNodes();
+    const SwNodes& rNds = pDoc->GetNodes();
     IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
     std::optional<SwPaM> oPam;
     ::sw::mark::IMark* pMark = nullptr;
@@ -657,15 +657,21 @@ void SwHistoryBookmark::SetInDoc( SwDoc* pDoc, bool )
     if(m_bSavePos)
     {
         SwContentNode* const pContentNd = rNds[m_nNode]->GetContentNode();
-        assert(pContentNd);
+        assert(pContentNd && "A bookmark position must always be on a content 
node");
         oPam.emplace(*pContentNd, m_nContent);
     }
     else
     {
         assert(pMark);
-        oPam.emplace(pMark->GetMarkPos());
+        if (pMark != nullptr)
+            oPam.emplace(pMark->GetMarkPos());
     }
     assert(oPam);
+    if (!oPam)
+    {
+        // Nothing to do without a valid SwPaM.
+        return;
+    }
 
     if(m_bSaveOtherPos)
     {

Reply via email to