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

Michael Stahl mstahl at redhat.com
Thu Sep 11 01:41:06 PDT 2014


 sw/source/core/crsr/crstrvl.cxx |   59 +++++++++++++++++++++++-----------------
 1 file changed, 34 insertions(+), 25 deletions(-)

New commits:
commit 5979ab84e8a0038a1225020e19e4b884423247fc
Author: Michael Stahl <mstahl at redhat.com>
Date:   Thu Sep 11 10:34:51 2014 +0200

    sw: actually check that iterator is valid
    
    Change-Id: Icefedf1d3fe09ed6670481dcdc4c5e745e816b1b

diff --git a/sw/source/core/crsr/crstrvl.cxx b/sw/source/core/crsr/crstrvl.cxx
index ab6c2d4..898f56b 100644
--- a/sw/source/core/crsr/crstrvl.cxx
+++ b/sw/source/core/crsr/crstrvl.cxx
@@ -635,7 +635,7 @@ lcl_FindField(bool & o_rFound, _SetGetExpFlds const& rSrtLst,
 
     _SetGetExpFlds::const_iterator it = rSrtLst.lower_bound(pSrch.get());
 
-    o_rFound = (**it == *pSrch);
+    o_rFound = (it == rSrtLst.end()) ? false : (**it == *pSrch);
     return it;
 }
 
commit cd994fc07f82bf950410bbdc88fbc4de7805547a
Author: Michael Stahl <mstahl at redhat.com>
Date:   Thu Sep 11 10:27:23 2014 +0200

    sw: factor out a function to encapsulate object lifetimes
    
    Change-Id: Ie49cb4729d70f2b1fee9a2b7bd4ac095732a3d58

diff --git a/sw/source/core/crsr/crstrvl.cxx b/sw/source/core/crsr/crstrvl.cxx
index 86ebf8c..ab6c2d4 100644
--- a/sw/source/core/crsr/crstrvl.cxx
+++ b/sw/source/core/crsr/crstrvl.cxx
@@ -608,6 +608,37 @@ void lcl_MakeFldLst(
     }
 }
 
+static _SetGetExpFlds::const_iterator
+lcl_FindField(bool & o_rFound, _SetGetExpFlds const& rSrtLst,
+        SwRootFrm *const pLayout, SwTxtNode *const pTxtNode,
+        SwTxtFld *const pTxtFld, SwPosition const& rPos,
+        sal_Int32 const nContentOffset)
+{
+    boost::scoped_ptr<_SetGetExpFld> pSrch;
+    boost::scoped_ptr<SwIndex> pIndex;
+    if (-1 == nContentOffset)
+    {
+        pSrch.reset(new _SetGetExpFld(rPos.nNode, pTxtFld, &rPos.nContent));
+    }
+    else
+    {
+        pIndex.reset(new SwIndex(rPos.nNode.GetNode().GetCntntNode(), nContentOffset));
+        pSrch.reset(new _SetGetExpFld(rPos.nNode, pTxtFld, pIndex.get()));
+    }
+
+    if (rPos.nNode.GetIndex() < pTxtNode->GetNodes().GetEndOfExtras().GetIndex())
+    {
+        // also at collection use only the first frame
+        Point aPt;
+        pSrch->SetBodyPos(*pTxtNode->getLayoutFrm(pLayout, &aPt, &rPos, false));
+    }
+
+    _SetGetExpFlds::const_iterator it = rSrtLst.lower_bound(pSrch.get());
+
+    o_rFound = (**it == *pSrch);
+    return it;
+}
+
 bool SwCrsrShell::MoveFldType(
     const SwFieldType* pFldType,
     const bool bNext,
@@ -693,31 +724,9 @@ bool SwCrsrShell::MoveFldType(
                     && rPos.nContent.GetIndex() != pTxtFld->GetStart())
                 nContentOffset = pTxtFld->GetStart();
         }
-
-        _SetGetExpFld *pSrch = NULL;
-        SwIndex *pIndex = NULL;
-        if( -1 == nContentOffset )
-        {
-            pSrch = new _SetGetExpFld( rPos.nNode, pTxtFld, &rPos.nContent );
-        }
-        else
-        {
-            pIndex = new SwIndex( rPos.nNode.GetNode().GetCntntNode(), nContentOffset );
-            pSrch = new _SetGetExpFld( rPos.nNode, pTxtFld, pIndex );
-        }
-
-        if( rPos.nNode.GetIndex() < mpDoc->GetNodes().GetEndOfExtras().GetIndex() )
-        {
-            // also at collection use only the first frame
-            Point aPt;
-            pSrch->SetBodyPos( *pTNd->getLayoutFrm( GetLayout(), &aPt, &rPos, false ) );
-        }
-
-        it = aSrtLst.lower_bound( pSrch );
-
-        bool isSrch = (**it == *pSrch);
-        delete pIndex;
-        delete pSrch;
+        bool isSrch;
+        it = lcl_FindField(isSrch, aSrtLst,
+                GetLayout(), pTNd, pTxtFld, rPos, nContentOffset);
 
         if( bDelFld )
         {


More information about the Libreoffice-commits mailing list