summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/qa/extras/ww8import/data/tdf106799.docbin0 -> 11264 bytes
-rw-r--r--sw/qa/extras/ww8import/ww8import.cxx15
-rw-r--r--sw/source/filter/ww8/ww8par.cxx4
3 files changed, 18 insertions, 1 deletions
diff --git a/sw/qa/extras/ww8import/data/tdf106799.doc b/sw/qa/extras/ww8import/data/tdf106799.doc
new file mode 100644
index 000000000000..0637e8cce692
--- /dev/null
+++ b/sw/qa/extras/ww8import/data/tdf106799.doc
Binary files differ
diff --git a/sw/qa/extras/ww8import/ww8import.cxx b/sw/qa/extras/ww8import/ww8import.cxx
index c50ab96722f8..1a2ec45af6fb 100644
--- a/sw/qa/extras/ww8import/ww8import.cxx
+++ b/sw/qa/extras/ww8import/ww8import.cxx
@@ -108,6 +108,21 @@ DECLARE_WW8IMPORT_TEST( testTdf105570, "tdf105570.doc" )
CPPUNIT_ASSERT_EQUAL( sal_uInt16(0), pTableNd->GetTable().GetRowsToRepeat() );
}
+DECLARE_WW8IMPORT_TEST(testTdf106799, "tdf106799.doc")
+{
+ sal_Int32 nCellWidths[3][4] = { { 9530, 0, 0, 0 },{ 2382, 2382, 2382, 2384 },{ 2382, 2382, 2382, 2384 } };
+ sal_Int32 nCellTxtLns[3][4] = { { 1, 0, 0, 0 },{ 1, 0, 0, 0},{ 1, 1, 1, 1 } };
+ // Table was distorted because of missing sprmPFInnerTableCell at paragraph marks (0x0D) with sprmPFInnerTtp
+ for (sal_Int32 nRow : { 0, 1, 2 })
+ for (sal_Int32 nCell : { 0, 1, 2, 3 })
+ {
+ OString cellXPath("/root/page/body/tab/row/cell/tab/row[" + OString::number(nRow+1) + "]/cell[" + OString::number(nCell+1) + "]/");
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(cellXPath.getStr(), nCellWidths[nRow][nCell], parseDump(cellXPath + "infos/bounds", "width").toInt32());
+ if (nCellTxtLns[nRow][nCell] != 0)
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(cellXPath.getStr(), nCellTxtLns[nRow][nCell], parseDump(cellXPath + "txt/Text", "nLength").toInt32());
+ }
+}
+
// tests should only be added to ww8IMPORT *if* they fail round-tripping in ww8EXPORT
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index 3bd36395c5e4..908dcd0f7b71 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -3673,7 +3673,9 @@ bool SwWW8ImplReader::ReadChar(long nPosCp, long nCpOfs)
bParaMark = false;
}
}
- else if (m_bWasTabCellEnd)
+ // tdf#106799: We expect TTP marks to be also cell marks,
+ // but sometimes sprmPFInnerTtp comes without sprmPFInnerTableCell
+ else if (m_bWasTabCellEnd || m_bWasTabRowEnd)
{
TabCellEnd();
bParaMark = false;