summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2020-08-21 00:15:29 +0300
committerMike Kaganski <mike.kaganski@collabora.com>2020-09-15 11:50:26 +0200
commitef27927b9d953aca6043f09074df956401b32a43 (patch)
tree59af024c41d2936132dcbb60e116e163a25460d6 /sw
parentf483a26be68fd9f13d176ac5c17ffec25f0634f6 (diff)
tdf#135942: avoid collecting autostyles during writing them
This modifies the container over which iteration is performed. Additionally, make sure that all nested table autostyles are collected on the first phase. Change-Id: I74c0bb1aaacad095226c21e6bf51cc8668133bb3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101096 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> (cherry picked from commit f0286ad82465152b29bba01ab2edeb97291397fa) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101069 Reviewed-by: Caolán McNamara <caolanm@redhat.com> (cherry picked from commit 0273675e7dde577077ccca17571846a0942f2630) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102700 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Diffstat (limited to 'sw')
-rw-r--r--sw/qa/extras/odfexport/data/nestedTableInFooter.odtbin0 -> 8611 bytes
-rw-r--r--sw/qa/extras/odfexport/odfexport.cxx12
-rw-r--r--sw/source/filter/xml/xmltble.cxx21
3 files changed, 32 insertions, 1 deletions
diff --git a/sw/qa/extras/odfexport/data/nestedTableInFooter.odt b/sw/qa/extras/odfexport/data/nestedTableInFooter.odt
new file mode 100644
index 000000000000..0356f04ee14e
--- /dev/null
+++ b/sw/qa/extras/odfexport/data/nestedTableInFooter.odt
Binary files differ
diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx
index c40824a1e823..5ef2d7cd0b38 100644
--- a/sw/qa/extras/odfexport/odfexport.cxx
+++ b/sw/qa/extras/odfexport/odfexport.cxx
@@ -2414,5 +2414,17 @@ DECLARE_ODFEXPORT_TEST(tdf124470, "tdf124470TableAndEmbeddedUsedFonts.odt")
}
}
+DECLARE_ODFEXPORT_TEST(tdf135942, "nestedTableInFooter.odt")
+{
+ // All table autostyles should be collected, including nested, and must not crash.
+
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+
+ if (xmlDocPtr pXmlDoc = parseExport("styles.xml"))
+ {
+ assertXPath(pXmlDoc, "/office:document-styles/office:automatic-styles/style:style[@style:family='table']", 2);
+ }
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/xml/xmltble.cxx b/sw/source/filter/xml/xmltble.cxx
index 80d786d8d884..6a4fa1c9902b 100644
--- a/sw/source/filter/xml/xmltble.cxx
+++ b/sw/source/filter/xml/xmltble.cxx
@@ -1183,8 +1183,27 @@ void SwXMLTextParagraphExport::exportTable(
// During the flat XML export (used e.g. by .sdw-export)
// ALL flags are set at the same time.
const bool bExportStyles = bool( GetExport().getExportFlags() & SvXMLExportFlags::STYLES );
- if ( bExportStyles || !pFormat->GetDoc()->IsInHeaderFooter( aIdx ) )
+ if (!isAutoStylesCollected()
+ && (bExportStyles || !pFormat->GetDoc()->IsInHeaderFooter(aIdx)))
+ {
maTableNodes.push_back(pTableNd);
+ // Collect all tables inside cells of this table, too
+ const auto aCellNames = pXTable->getCellNames();
+ for (const OUString& rCellName : aCellNames)
+ {
+ css::uno::Reference<css::container::XEnumerationAccess> xCell(
+ pXTable->getCellByName(rCellName), css::uno::UNO_QUERY);
+ if (!xCell)
+ continue;
+ auto xEnumeration = xCell->createEnumeration();
+ while (xEnumeration->hasMoreElements())
+ {
+ if (css::uno::Reference<css::text::XTextTable> xInnerTable{
+ xEnumeration->nextElement(), css::uno::UNO_QUERY })
+ exportTable(xInnerTable, bAutoStyles, _bProgress);
+ }
+ }
+ }
}
else
{