writerfilter/source/dmapper/DomainMapper_Impl.cxx |   13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

New commits:
commit 2f4938caebc5e8b5c7dcce45b9a5191794ceffcd
Author:     Miklos Vajna <vmik...@collabora.com>
AuthorDate: Tue Dec 5 11:43:42 2023 +0100
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Tue Dec 5 12:58:44 2023 +0100

    writerfilter: fix crash in DomainMapper_Impl::PushSdt()
    
    Crashreport signature:
    
    Fatal signal received: SIGSEGV code: 1 for address: 0x0
    
    program/libwriterfilterlo.so
            writerfilter::dmapper::DomainMapper_Impl::PushSdt()
                    writerfilter/source/dmapper/DomainMapper_Impl.cxx:987
    program/libwriterfilterlo.so
            writerfilter::dmapper::DomainMapper::lcl_attribute(unsigned int, 
writerfilter::Value&)
                    include/tools/ref.hxx:56
    program/libwriterfilterlo.so
            
writerfilter::ooxml::OOXMLProperty::resolve(writerfilter::Properties&)
                    include/tools/ref.hxx:56
    program/libwriterfilterlo.so
            
writerfilter::ooxml::OOXMLPropertySet::resolve(writerfilter::Properties&)
                    include/tools/ref.hxx:157
    
    Change-Id: I76416ca707a4ac40495e5c22f62fcd017bcb5e48
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160336
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Tested-by: Caolán McNamara <caolan.mcnam...@collabora.com>
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index f3558bfeac1e..897ff2f83eca 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -983,8 +983,19 @@ void DomainMapper_Impl::PushSdt()
     }
 
     uno::Reference<text::XTextAppend> xTextAppend = 
m_aTextAppendStack.top().xTextAppend;
+    if (!xTextAppend.is())
+    {
+        return;
+    }
+
+    uno::Reference<text::XText> xText = xTextAppend->getText();
+    if (!xText.is())
+    {
+        return;
+    }
+
     uno::Reference<text::XTextCursor> xCursor
-        = 
xTextAppend->getText()->createTextCursorByRange(xTextAppend->getEnd());
+        = xText->createTextCursorByRange(xTextAppend->getEnd());
     // Offset so the cursor is not adjusted as we import the SDT's content.
     bool bStart = !xCursor->goLeft(1, /*bExpand=*/false);
     m_xSdtStarts.push({bStart, OUString(), xCursor->getStart()});

Reply via email to