sw/source/core/layout/sectfrm.cxx |   24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

New commits:
commit 5f0f69ba9b7d083cf7c0169be6e9c916008787bb
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Mon Sep 2 13:46:12 2024 +0200
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon Sep 2 16:06:08 2024 +0200

    sw: fix iterating columned sections in SwSectionFrame::SwClientNotify()
    
    This was asserting in JunitTest_sw_unoapi_3 on libreoffice-24-2 branch
    but strangely enough not on master.
    
    (regression from commit a97e245ba11598050e1800fde9ace796d20e9df2)
    
    Change-Id: Id71dac03992fff0294ab1b2c6d9f3bf10b8c3974
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172740
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/sw/source/core/layout/sectfrm.cxx 
b/sw/source/core/layout/sectfrm.cxx
index 2bab18a2888e..6649a0023007 100644
--- a/sw/source/core/layout/sectfrm.cxx
+++ b/sw/source/core/layout/sectfrm.cxx
@@ -2774,7 +2774,29 @@ void SwSectionFrame::SwClientNotify(const SwModify& 
rMod, const SfxHint& rHint)
                 pFirstOnPage = pFirstOnPage->GetUpper();
             }
             assert(pFirstOnPage->IsContentFrame() || 
pFirstOnPage->IsTabFrame());
-            for (SwFrame* pLowerFrame = Lower(); pLowerFrame; pLowerFrame = 
pLowerFrame->GetNext())
+            SwColumnFrame * pColumn{Lower()->IsColumnFrame()
+                    ? static_cast<SwColumnFrame*>(Lower()) : nullptr};
+            auto IterateLower = [&pColumn](SwFrame *const pLowerFrame) -> 
SwFrame*
+            {
+                if (pLowerFrame->GetNext())
+                {
+                    return pLowerFrame->GetNext();
+                }
+                if (pColumn)
+                {
+                    pColumn = static_cast<SwColumnFrame*>(pColumn->GetNext());
+                    if (pColumn)
+                    {
+                        return 
static_cast<SwLayoutFrame*>(pColumn->Lower())->Lower();
+                    }
+                }
+                return nullptr;
+            };
+            for (SwFrame* pLowerFrame = pColumn
+                        ? 
static_cast<SwLayoutFrame*>(pColumn->Lower())->Lower()
+                        : Lower();
+                 pLowerFrame;
+                 pLowerFrame = IterateLower(pLowerFrame))
             {
                 if (pLowerFrame == pFirstOnPage)
                 {

Reply via email to