[Libreoffice-commits] core.git: sw/qa writerfilter/source

Miklos Vajna vmiklos at collabora.co.uk
Mon Dec 19 18:37:26 UTC 2016


 sw/qa/extras/ooxmlexport/data/tdf104162.docx             |binary
 sw/qa/extras/ooxmlexport/ooxmlexport9.cxx                |    8 ++++++++
 writerfilter/source/dmapper/DomainMapperTableHandler.cxx |    8 ++++++++
 3 files changed, 16 insertions(+)

New commits:
commit 74dddd8b483d89dc7915471441cc30a1aa342363
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Dec 19 19:35:20 2016 +0100

    tdf#104162 DOCX import: fix crash on <w:hideMark/> in a comment table
    
    sw comments are handled by editeng, so tables in comments aren't
    imported. That means lcl_emptyRow() may get a row where the first cell's
    start is an empty reference, so handle that case.
    
    Change-Id: I43e286314143934c20e6cbbd656d32883b6b2efe

diff --git a/sw/qa/extras/ooxmlexport/data/tdf104162.docx b/sw/qa/extras/ooxmlexport/data/tdf104162.docx
new file mode 100644
index 0000000..61b51c0
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf104162.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
index 1c73850..1e20ff4 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
@@ -189,6 +189,14 @@ DECLARE_OOXMLEXPORT_TEST(testTdf99227, "tdf99227.docx")
     assertXPath(pXmlDoc, "//w:footnote[3]/w:p/w:r[5]/w:drawing", 1);
 }
 
+DECLARE_OOXMLEXPORT_TEST(testTdf104162, "tdf104162.docx")
+{
+    // This crashed: the comment field contained a table with a <w:hideMark/>.
+    uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
+    uno::Reference<container::XElementAccess> xTextFields(xTextFieldsSupplier->getTextFields());
+    CPPUNIT_ASSERT(xTextFields->hasElements());
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
index 61f53e0..30a4ad7 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
@@ -896,6 +896,14 @@ bool lcl_emptyRow(std::vector<RowSequence_t>& rTableRanges, sal_Int32 nRow)
         return false;
     }
 
+    if (!rRowSeq[0][0].is())
+    {
+        // This can happen when we can't import the table, e.g. we're inside a
+        // comment.
+        SAL_WARN("writerfilter.dmapper", "rRowSeq[0][0] is an empty reference");
+        return false;
+    }
+
     uno::Reference<text::XTextRangeCompare> xTextRangeCompare(rRowSeq[0][0]->getText(), uno::UNO_QUERY);
     try
     {


More information about the Libreoffice-commits mailing list