sw/source/core/txtnode/modeltoviewhelper.cxx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
New commits: commit c346971866a462c658d33fb1e1710783f131f1b8 Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Mon Aug 8 16:12:14 2022 +0200 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Fri Aug 12 10:29:01 2022 +0200 sw_fieldmarkhide: fix crash on exporting forum-mso-en-4034.docx to ODT The problem is that there's a field in a preceding paragraph that ends immediately before another field starts, and so the backwards iteration erroneously picks it up in ModelToViewHelper ctor. Change-Id: I6e65c04e0372377b3af48f1d80de287b6113e1c3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137986 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@allotropia.de> (cherry picked from commit 4f62ae798cc1f9f7bc524e408fc7a370345b40a8) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138025 Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/sw/source/core/txtnode/modeltoviewhelper.cxx b/sw/source/core/txtnode/modeltoviewhelper.cxx index e5aec1b510be..306f58c2b8db 100644 --- a/sw/source/core/txtnode/modeltoviewhelper.cxx +++ b/sw/source/core/txtnode/modeltoviewhelper.cxx @@ -140,8 +140,16 @@ ModelToViewHelper::ModelToViewHelper(const SwTextNode &rNode, // skip it, must be handled in loop below if (pFieldMark->GetMarkStart().nNode < rNode) { - SwPosition const sepPos(::sw::mark::FindFieldSep(*pFieldMark)); - startedFields.emplace_front(pFieldMark, sepPos.nNode < rNode); + // this can be a nested field's end - skip over those! + if (pFieldMark->GetMarkEnd().nNode < rNode) + { + assert(cursor.GetPoint()->nNode.GetNode().GetTextNode()->GetText()[cursor.GetPoint()->nContent.GetIndex()] == CH_TXT_ATR_FIELDEND); + } + else + { + SwPosition const sepPos(::sw::mark::FindFieldSep(*pFieldMark)); + startedFields.emplace_front(pFieldMark, sepPos.nNode < rNode); + } *cursor.GetPoint() = pFieldMark->GetMarkStart(); } if (!cursor.Move(fnMoveBackward, GoInContent))