[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - sw/qa sw/source

Miklos Vajna vmiklos at collabora.co.uk
Mon Nov 2 06:55:36 PST 2015


 sw/qa/extras/ooxmlimport/data/tdf89165.docx |binary
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx    |    5 +++++
 sw/source/core/layout/hffrm.cxx             |   12 +++++++++---
 3 files changed, 14 insertions(+), 3 deletions(-)

New commits:
commit 47e8bcd703aa74deafd2e5571205f2dc565e6cf2
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Oct 12 09:07:52 2015 +0200

    tdf#89165 sw: looping layout in SwHeadFootFrm::FormatSize()
    
    FormatObjsAtFrm() returns false, indicating that the result is not
    perfect, and the caller hopes that formatting all children of the frame
    again will help. Make sure that in case that assumption turns out to be false, we at
    least do not loop.
    
    The loop limit is enough to make the original i#43771 bugdoc still laid
    out properly.
    
    (cherry picked from commit 51438e87d0e17a4cc3c991165d22c740b3ac1fc2)
    
    Change-Id: Ife9bd99a628a72edb922d04e05081971b6adf340
    Reviewed-on: https://gerrit.libreoffice.org/19407
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

diff --git a/sw/qa/extras/ooxmlimport/data/tdf89165.docx b/sw/qa/extras/ooxmlimport/data/tdf89165.docx
new file mode 100644
index 0000000..a060ca4
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/tdf89165.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index dc460b5..1668def 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -2801,6 +2801,11 @@ DECLARE_OOXMLIMPORT_TEST(testTdf90153, "tdf90153.docx")
     CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AT_CHARACTER, getProperty<text::TextContentAnchorType>(getShape(1), "AnchorType"));
 }
 
+DECLARE_OOXMLIMPORT_TEST(testTdf89165, "tdf89165.docx")
+{
+    // This must not hang in layout
+}
+
 #endif
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/core/layout/hffrm.cxx b/sw/source/core/layout/hffrm.cxx
index e12df3e..03f6ed4 100644
--- a/sw/source/core/layout/hffrm.cxx
+++ b/sw/source/core/layout/hffrm.cxx
@@ -246,6 +246,7 @@ void SwHeadFootFrm::FormatSize(SwTwips nUL, const SwBorderAttrs * pAttrs)
                     pFrm->_InvalidatePos();
                     aOldFooterPrtPos = Frm().Pos() + Prt().Pos();
                 }
+                int nLoopControl = 0;
                 while( pFrm )
                 {
                     pFrm->Calc(getRootFrm()->GetCurrShell()->GetOut());
@@ -263,9 +264,14 @@ void SwHeadFootFrm::FormatSize(SwTwips nUL, const SwBorderAttrs * pAttrs)
                         if ( !SwObjectFormatter::FormatObjsAtFrm( *pFrm,
                                                                   *(pFrm->FindPageFrm()) ) )
                         {
-                            // restart format with first content
-                            pFrm = Lower();
-                            continue;
+                            if (nLoopControl++ < 20)
+                            {
+                                // restart format with first content
+                                pFrm = Lower();
+                                continue;
+                            }
+                            else
+                                SAL_WARN("sw", "SwHeadFootFrm::FormatSize: loop detection triggered");
                         }
                     }
                     pFrm = pFrm->GetNext();


More information about the Libreoffice-commits mailing list