diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-12-19 19:35:20 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-12-20 13:09:20 +0000 |
commit | e4be3c9810ecbf2733f7e5884dbba19c426749ef (patch) | |
tree | 9164d27551a41f6726ca08a9411881181650681b | |
parent | c5690f143fe8384f7193a74894e5ae4c0a302f15 (diff) |
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.
(cherry picked from commit 74dddd8b483d89dc7915471441cc30a1aa342363)
Conflicts:
sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
Change-Id: I43e286314143934c20e6cbbd656d32883b6b2efe
Reviewed-on: https://gerrit.libreoffice.org/32223
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
-rw-r--r-- | sw/qa/extras/ooxmlexport/data/tdf104162.docx | bin | 0 -> 14541 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport9.cxx | 8 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapperTableHandler.cxx | 8 |
3 files changed, 16 insertions, 0 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/tdf104162.docx b/sw/qa/extras/ooxmlexport/data/tdf104162.docx Binary files differnew file mode 100644 index 000000000000..61b51c007713 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf104162.docx diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx index 5487a07f36ed..8bf2b5b1383c 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx @@ -176,6 +176,14 @@ DECLARE_OOXMLEXPORT_TEST(testTdf103651, "tdf103651.docx") CPPUNIT_ASSERT_EQUAL( sal_Int32( -1 ) , sContent.indexOf( sal_Unicode( 0xf04a ) )); } +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 0b89aa15dc4d..3af9e3b17b4c 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 { |