[Libreoffice-commits] core.git: sw/qa sw/source

Miklos Vajna vmiklos at collabora.co.uk
Fri Jul 7 14:57:36 UTC 2017


 sw/qa/extras/uiwriter/data/rhbz739252-3.odt |binary
 sw/qa/extras/uiwriter/uiwriter.cxx          |   13 +++++++++++++
 sw/source/core/layout/sectfrm.cxx           |    5 +++--
 3 files changed, 16 insertions(+), 2 deletions(-)

New commits:
commit 652556ec3e9218655a67b4c4de4e26fbe81855de
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Fri Jul 7 14:04:28 2017 +0200

    rhbz#739252 sw: fix crash on split tables inside nested sections
    
    Commit b5e0a143308e976b4165ff6181f4dccc3db0bd31 (tdf#108524 sw: attempt
    to split section frames inside table cells, take two, 2017-07-03)
    checked for tables in SwFrame::GetNextSctLeaf() when it considered
    looking up the next "follow" cell frame.
    
    But this is too general, in practice it is only necessary to look for
    follow cell frames in case the frame in question is in a table, but not
    in a table-in-section. This at the same time avoids a crash with tables
    inside nested sections, as it happens in the bugdoc.
    
    Change-Id: If648cb477be5492c7158f89934435ca7021a6a63
    Reviewed-on: https://gerrit.libreoffice.org/39692
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/sw/qa/extras/uiwriter/data/rhbz739252-3.odt b/sw/qa/extras/uiwriter/data/rhbz739252-3.odt
new file mode 100644
index 000000000000..e457c035b662
Binary files /dev/null and b/sw/qa/extras/uiwriter/data/rhbz739252-3.odt differ
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index b85a7e58e5b4..453c62dece55 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -256,6 +256,7 @@ public:
     void testTdf107976();
     void testTdf108524();
     void testTableInSection();
+    void testTableInNestedSection();
     void testLinesInSectionInTable();
 
     CPPUNIT_TEST_SUITE(SwUiWriterTest);
@@ -400,6 +401,7 @@ public:
     CPPUNIT_TEST(testTdf107976);
     CPPUNIT_TEST(testTdf108524);
     CPPUNIT_TEST(testTableInSection);
+    CPPUNIT_TEST(testTableInNestedSection);
     CPPUNIT_TEST(testLinesInSectionInTable);
     CPPUNIT_TEST_SUITE_END();
 
@@ -4993,6 +4995,17 @@ void SwUiWriterTest::testTableInSection()
     assertXPath(pXmlDoc, "/root/page[2]/body/section/tab/row/cell", 2);
 }
 
+void SwUiWriterTest::testTableInNestedSection()
+{
+    // The document has a nested section, containing a table that spans over 2 pages.
+    // This crashed the layout.
+    createDoc("rhbz739252-3.odt");
+    xmlDocPtr pXmlDoc = parseLayoutDump();
+    // Make sure the table is inside a section and spans over 2 pages.
+    assertXPath(pXmlDoc, "//page[1]//section/tab", 1);
+    assertXPath(pXmlDoc, "//page[2]//section/tab", 1);
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest);
 CPPUNIT_PLUGIN_IMPLEMENT();
 
diff --git a/sw/source/core/layout/sectfrm.cxx b/sw/source/core/layout/sectfrm.cxx
index 7288251dfd12..08e3934ddf6f 100644
--- a/sw/source/core/layout/sectfrm.cxx
+++ b/sw/source/core/layout/sectfrm.cxx
@@ -1515,9 +1515,10 @@ SwLayoutFrame *SwFrame::GetNextSctLeaf( MakePageType eMakePage )
     SwLayoutFrame *pLayLeaf;
 
     SwLayoutFrame* pCellLeaf = nullptr;
-    if (IsInTab())
+    if (IsInTab() && !IsInTableInSection(this))
     {
-        // We are in a table, see if there is a follow cell frame created already.
+        // We are in a table (which is itself not in a section), see if there
+        // is a follow cell frame created already.
         pCellLeaf = GetNextCellLeaf();
         if (!pCellLeaf)
         {


More information about the Libreoffice-commits mailing list