summaryrefslogtreecommitdiff
path: root/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2023-04-28 08:28:22 +0200
committerMiklos Vajna <vmiklos@collabora.com>2023-05-02 10:32:17 +0200
commitd161c6693039bbddeab447834c4cba271d5426d9 (patch)
treecc3585cc666321c8c33e4b5faa0d54f32b6f9b3e /writerfilter/source/dmapper/DomainMapperTableHandler.cxx
parenta7a9575e10cc63646e8e854d96bc379b95ce091b (diff)
sw floattable, crashtesting: fix PDF export of tdf114111-3.docx
Converting the bugdoc to PDF crashed Writer layout since commit ce3308a926f036b87515b8cd97d2b197063dc77a (tdf#61594 sw floattable: import floating tables as split flys by default, 2023-04-12). The stripped down document has 3 tables: a toplevel, a middle and an inner one. The middle one is floating. SwFrame::GetNextFlyLeaf() doesn't support nested tables, so we move an inner table frame to a next page, causing a frame to have the in-table flag, without a table frame parent, leading to a crash. Fix the problem by just disabling floating tables for nested tables for now. It can be enabled later, and not supporting inner floating tables was the intent of 8818dd359fbf0f37e1b318de89ab2ea7d735f58 (sw floattable: fix handling of nested non-floating tables at cell start, 2023-03-20) anyway. (cherry picked from commit 1795d5183d5371a24e8dcb15f8671c78b2c94665) Change-Id: I75db01c6c0fdd803130fbb2a8f2f90c6180051ac Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151253 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'writerfilter/source/dmapper/DomainMapperTableHandler.cxx')
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.cxx11
1 files changed, 3 insertions, 8 deletions
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
index e36404b8f68c..8c52f8269706 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
@@ -1330,7 +1330,7 @@ static void lcl_convertFormulaRanges(const uno::Reference<text::XTextTable> & xT
}
}
-void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTableStartsAtCellStart)
+void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool /*bTableStartsAtCellStart*/)
{
#ifdef DBG_UTIL
TagLogger::getInstance().startElement("tablehandler.endTable");
@@ -1577,14 +1577,9 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTab
m_aTableProperties->getValue(TablePropertyMap::TABLE_WIDTH_TYPE, nTableWidthType);
// m_xText points to the body text, get the current xText from m_rDMapper_Impl, in case e.g. we would be in a header.
uno::Reference<text::XTextAppendAndConvert> xTextAppendAndConvert(m_rDMapper_Impl.GetTopTextAppend(), uno::UNO_QUERY);
- // Only execute the conversion if the table is not anchored at
- // the start of an outer table cell, that's not yet
- // implemented.
- // Multi-page floating tables works if an outer/toplevel table is floating, but not
- // when an inner table would float.
- bool bToplevelSplitFly = nestedTableLevel <= 1;
+ // Only execute the conversion for top-level tables.
uno::Reference<beans::XPropertySet> xFrameAnchor;
- if (xTextAppendAndConvert.is() && (!bTableStartsAtCellStart || bToplevelSplitFly))
+ if (xTextAppendAndConvert.is() && nestedTableLevel <= 1)
{
std::deque<css::uno::Any> aFramedRedlines = m_rDMapper_Impl.m_aStoredRedlines[StoredRedlines::FRAME];
std::vector<sal_Int32> redPos, redLen;