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 <vmik...@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 <vmik...@collabora.co.uk> Tested-by: Jenkins <c...@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(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits