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
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111741
diff --git a/sw/qa/extras/ooxmlexport/data/tdf140137.docx b/sw/qa/extras/ooxmlexport/data/tdf140137.docx
new file mode 100644
index 0000000..d03925e
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/tdf140137.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
index 04c4975..1e28459 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
@@ -81,6 +81,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 a19b939..84b959e 100644
--- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
@@ -726,17 +726,25 @@ void DomainMapperTableManager::endOfRowAction()
        size_t nWidthsBound = m_aGridBefore.back() + m_nCell.back() - 1;
        if (nWidthsBound)
        {
            if (nFullWidthRelative == 0)
                throw o3tl::divide_by_zero();

            ::std::vector< sal_Int32 >::const_iterator aSpansIter = pCurrentSpans->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;