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

Miklos Vajna vmiklos at collabora.co.uk
Thu Jul 6 19:18:54 UTC 2017


 sw/qa/extras/odfimport/data/i61225.sxw |binary
 sw/qa/extras/odfimport/odfimport.cxx   |    8 ++++++++
 sw/source/core/layout/findfrm.cxx      |    9 +++++++--
 3 files changed, 15 insertions(+), 2 deletions(-)

New commits:
commit 972fbddf80510f7daaf2128dbfda01c0e7535020
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Jul 6 14:07:45 2017 +0200

    i#61225 sw: fix layout loop with growable single-column sections
    
    Commit 6ade80cf142664e78954c7544534e9436ceb90c7 (tdf#108524 sw: allow
    move of frame inside section without columns, 2017-06-16) relaxed
    lcl_IsInSectionDirectly() used in SwFrame::IsMoveable() to allow move
    for all section frame contents if it has a single column.  That looked
    safe, as the multiple column case was already allowed.
    
    There is one situation where this still causes a problem: when the
    section has a single column and the section frame is growable -- as in
    that case we should grow the section frame, not move the contents.
    
    So go back to unconditionally allowing multi-column section contents and
    allow single-column section contents only in case the section frame is
    now growable.
    
    With this, ooo61225-1.sxw from the crashtesting corpus can be opened
    again without a layout loop.
    
    Change-Id: Ib2d3702a33da8e62b9bbf468d558ae16db8aa94b
    Reviewed-on: https://gerrit.libreoffice.org/39653
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/sw/qa/extras/odfimport/data/i61225.sxw b/sw/qa/extras/odfimport/data/i61225.sxw
new file mode 100644
index 000000000000..4f43541995c3
Binary files /dev/null and b/sw/qa/extras/odfimport/data/i61225.sxw differ
diff --git a/sw/qa/extras/odfimport/odfimport.cxx b/sw/qa/extras/odfimport/odfimport.cxx
index 06f2bf7f8a9c..a105bd658179 100644
--- a/sw/qa/extras/odfimport/odfimport.cxx
+++ b/sw/qa/extras/odfimport/odfimport.cxx
@@ -800,5 +800,13 @@ DECLARE_ODFIMPORT_TEST(testTdf100033_2, "tdf100033_2.odt")
     CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xIndexAccess->getCount());
 }
 
+DECLARE_ODFIMPORT_TEST(testI61225, "i61225.sxw")
+{
+    // Part of ooo61225-1.sxw from crashtesting.
+
+    // This never returned.
+    calcLayout();
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/layout/findfrm.cxx b/sw/source/core/layout/findfrm.cxx
index 74942256bef4..4a3d3722edd8 100644
--- a/sw/source/core/layout/findfrm.cxx
+++ b/sw/source/core/layout/findfrm.cxx
@@ -1256,10 +1256,15 @@ void SwFrame::InvalidateNextPrtArea()
 ///     but not if it sits in a table which itself sits in a section.
 static bool lcl_IsInSectionDirectly( const SwFrame *pUp )
 {
+    bool bSeenColumn = false;
+
     while( pUp )
     {
-        if( pUp->IsSctFrame() )
-            return true;
+        if( pUp->IsColumnFrame() )
+            bSeenColumn = true;
+        else if( pUp->IsSctFrame() )
+            // Allow move of frame in case our only column is not growable.
+            return bSeenColumn || !static_cast<const SwSectionFrame*>(pUp)->Growable();
         else if( pUp->IsTabFrame() )
             return false;
         pUp = pUp->GetUpper();


More information about the Libreoffice-commits mailing list