[Libreoffice-commits] core.git: sw/source

Michael Stahl (via logerrit) logerrit at kemper.freedesktop.org
Fri Aug 14 17:40:37 UTC 2020


 sw/source/core/txtnode/atrfld.cxx |    2 +-
 sw/source/core/undo/undobj.cxx    |    4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)

New commits:
commit 14fd4b54113f884cfd6871aeff693734fc06224b
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Fri Aug 14 16:35:32 2020 +0200
Commit:     Michael Stahl <michael.stahl at cib.de>
CommitDate: Fri Aug 14 19:39:54 2020 +0200

    tdf#135457 sw: fix invalidation of SwXTextField
    
    This was supposed to happen from SwNodes::ChgNode() when moving to the
    undo nodes array.
    
    There are fields with a range that contains other fields, when the outer
    field's range is deleted, the contained field moves to the undo array
    and its position is no longer valid to be given out by
    SwXTextField::getAnchor().
    
    (regression from c73b5e969b2f9abdb2b9191938ca30bec5af725d)
    
    Change-Id: I38c8b3393a777ca8dc8739b5ca4233a7f124961e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100749
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>

diff --git a/sw/source/core/txtnode/atrfld.cxx b/sw/source/core/txtnode/atrfld.cxx
index e13ea716932f..59b1f48e5d68 100644
--- a/sw/source/core/txtnode/atrfld.cxx
+++ b/sw/source/core/txtnode/atrfld.cxx
@@ -217,7 +217,7 @@ void SwFormatField::InvalidateField()
 {
     SwPtrMsgPoolItem const item(RES_REMOVE_UNO_OBJECT,
             &static_cast<SwModify&>(*this)); // cast to base class (void*)
-    NotifyClients(&item, &item);
+    CallSwClientNotify(sw::LegacyModifyHint{ &item, &item });
 }
 
 void SwFormatField::SwClientNotify( const SwModify& rModify, const SfxHint& rHint )
diff --git a/sw/source/core/undo/undobj.cxx b/sw/source/core/undo/undobj.cxx
index 9e043b1b1e23..18df69ee728c 100644
--- a/sw/source/core/undo/undobj.cxx
+++ b/sw/source/core/undo/undobj.cxx
@@ -868,6 +868,10 @@ void SwUndoSaveContent::DelContentIndex( const SwPosition& rMark,
 
     SwDoc* pDoc = rMark.nNode.GetNode().GetDoc();
 
+    // if it's not in the doc array, probably missing some invalidation somewhere
+    assert(&rPoint.nNode.GetNodes() == &pDoc->GetNodes());
+    assert(&rMark.nNode.GetNodes() == &pDoc->GetNodes());
+
     ::sw::UndoGuard const undoGuard(pDoc->GetIDocumentUndoRedo());
 
     // 1. Footnotes


More information about the Libreoffice-commits mailing list