diff options
author | Aron Budea <aron.budea@collabora.com> | 2021-02-28 22:04:24 +0100 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2021-03-01 12:09:11 +0100 |
commit | 526c0a35bc6863e1f9356f237195c804ebd58feb (patch) | |
tree | 7aadd9e5110b757deb22351103980545fad1ffb4 | |
parent | 662649d953c1f0f461d8df019731bb8854b5922b (diff) |
tdf#140137 Don't throw exception when w:gridCol is missing "w" attr
2149e924cbc32c370128c5f87a4f55c50c99e6bd added a division-by-zero
check, which caused Writer to throw an error on the bugdoc.
Since the file could be loaded fine before, let's return to a
working version, with the check included.
The cause is the following in document.xml
(originating from a non-MS generator):
<w:tblGrid>
<w:gridCol/>
<w:gridCol/>
</w:tblGrid>
Word still splits such tables differently, but that difference
was always there in Writer.
Change-Id: I6d91a736f460394a76f035298a238c41da201cb3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111723
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111736
-rw-r--r-- | sw/qa/extras/ooxmlexport/data/tdf140137.docx | bin | 0 -> 28792 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport16.cxx | 5 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapperTableManager.cxx | 18 |
3 files changed, 18 insertions, 5 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/tdf140137.docx b/sw/qa/extras/ooxmlexport/data/tdf140137.docx Binary files differnew file mode 100644 index 000000000000..d03925e75e2c --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf140137.docx diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx index 2b1b75c02b59..1a57488b67e7 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx @@ -85,6 +85,11 @@ DECLARE_OOXMLEXPORT_TEST(testTdf138953, "croppedAndRotated.odt") CPPUNIT_ASSERT_EQUAL(sal_Int32(8664), frameRect.Width); } +DECLARE_OOXMLEXPORT_TEST(testTdf140137, "tdf140137.docx") +{ + // Don't throw exception during load +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx index cefe801145c5..a4dda411ef72 100644 --- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx +++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx @@ -693,17 +693,25 @@ void DomainMapperTableManager::endOfRowAction() size_t nWidthsBound = getCurrentGridBefore() + m_nCell.back() - 1; if (nWidthsBound) { - if (nFullWidthRelative == 0) - throw o3tl::divide_by_zero(); - ::std::vector< sal_uInt32 >::const_iterator aSpansIter = rCurrentSpans.begin(); for( size_t nBorder = 0; nBorder < nWidthsBound; ++nBorder ) { - double fGridWidth = 0.; + double nRelPos, fGridWidth = 0.; for ( sal_Int32 nGridCount = *aSpansIter; nGridCount > 0; --nGridCount ) fGridWidth += (*pTableGrid)[nBorderGridIndex++]; - double nRelPos = (fGridWidth * 10000) / nFullWidthRelative; + if (fGridWidth == 0.) + { + // allow nFullWidthRelative here, with a sane 0.0 result + nRelPos = 0.; + } + else + { + if (nFullWidthRelative == 0) + throw o3tl::divide_by_zero(); + + nRelPos = (fGridWidth * 10000) / nFullWidthRelative; + } pSeparators[nBorder].Position = rtl::math::round(nRelPos + nLastRelPos); pSeparators[nBorder].IsVisible = true; |