summaryrefslogtreecommitdiff
path: root/sw/source
diff options
context:
space:
mode:
authorMichael Stahl <michael.stahl@allotropia.de>2023-08-10 19:04:08 +0200
committerMichael Stahl <michael.stahl@allotropia.de>2023-08-14 15:00:47 +0200
commitfcf6f5550cc7949e94dc74cbcd10a700a225e574 (patch)
treed700048cdeac0a5743bbf09b407cc9e880c9d22e /sw/source
parent518fa99dd7693d64a53e404a065090aedc0002b1 (diff)
tdf#142694 sw: layout: fix infinite loop in SwFrame::PrepareMake()
The problem is that SwFrame::FindNext_() returns itself, because it's a table frame 401 and its last cell is empty. There was a nested table in the cell, but during an attempt to split the outer table 401, the inner table moved backwards. This is due to code that was added in commit c9c956f2716c58e2573a9ac07073f712d736ed02, which only checks that the height of the table frame is 0, but in this case the inner table does contain a text frame which has never been formatted yet, but still the table frame's size and print area was set to valid. Unfortunately adding an obvious !ContainsContent() check to the condition breaks uiwriter4 testTdf114306_2, the last table is not on page 4 but on page 5, for no good reason. So just fix SwFrame::FindNext_(), it should never return "this" anyway. (somehow regression from commit 53a0a86df6eb5fc64a85ecd03f2e354fd4d8e213) Change-Id: If043a53c32f175fc560d422c4a4e16d8e8c6ef49 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155563 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Diffstat (limited to 'sw/source')
-rw-r--r--sw/source/core/layout/findfrm.cxx16
1 files changed, 13 insertions, 3 deletions
diff --git a/sw/source/core/layout/findfrm.cxx b/sw/source/core/layout/findfrm.cxx
index ae2c7473baf3..1a98f6cf6747 100644
--- a/sw/source/core/layout/findfrm.cxx
+++ b/sw/source/core/layout/findfrm.cxx
@@ -945,9 +945,19 @@ SwFrame *SwFrame::FindNext_()
)
)
{
- pRet = pNxtCnt->IsInTab() ? pNxtCnt->FindTabFrame()
- : pNxtCnt;
- break;
+ if (pNxtCnt->IsInTab())
+ {
+ if (!IsTabFrame() || !static_cast<SwLayoutFrame*>(this)->IsAnLower(pNxtCnt))
+ {
+ pRet = pNxtCnt->FindTabFrame();
+ break;
+ }
+ }
+ else
+ {
+ pRet = pNxtCnt;
+ break;
+ }
}
pNxtCnt = lcl_NextFrame( pNxtCnt );
}