editeng/source/editeng/edtspell.cxx | 65 ++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 28 deletions(-)
New commits: commit 874f2e53b24ad24d4e99f0df54ba6539d1958371 Author: Michael Stahl <mst...@redhat.com> Date: Fri Feb 3 14:19:47 2012 +0100 WrongList::TextInserted: fix STL crash vector iterators and insert don't mix well (regression from dfbf0cabfa8310502e19642d56c746cc0d454d27) diff --git a/editeng/source/editeng/edtspell.cxx b/editeng/source/editeng/edtspell.cxx index f13fb1a..eda0d61 100644 --- a/editeng/source/editeng/edtspell.cxx +++ b/editeng/source/editeng/edtspell.cxx @@ -242,48 +242,51 @@ void WrongList::TextInserted( sal_uInt16 nPos, sal_uInt16 nNew, sal_Bool bPosIsS nInvalidEnd = nPos+nNew; } - for (WrongList::iterator i = begin(); i != end(); ++i) + for (WrongList::size_type i = 0; i < size(); ++i) { + WrongRange & rWrong = (*this)[i]; // why does this thing derive vector? sal_Bool bRefIsValid = sal_True; - if (i->nEnd >= nPos) + if (rWrong.nEnd >= nPos) { // Move all Wrongs after the insert position... - if (i->nStart > nPos) + if (rWrong.nStart > nPos) { - i->nStart += nNew; - i->nEnd += nNew; + rWrong.nStart += nNew; + rWrong.nEnd += nNew; } // 1: Starts before and goes until nPos... - else if (i->nEnd == nPos) + else if (rWrong.nEnd == nPos) { // Should be halted at a blank! if ( !bPosIsSep ) - i->nEnd += nNew; + rWrong.nEnd += nNew; } // 2: Starts before and goes until after nPos... - else if (i->nStart < nPos && i->nEnd > nPos) + else if ((rWrong.nStart < nPos) && (rWrong.nEnd > nPos)) { - i->nEnd += nNew; + rWrong.nEnd += nNew; // When a separator remove and re-examine the Wrong if ( bPosIsSep ) { // Split Wrong... - WrongRange aNewWrong(i->nStart, nPos); - i->nStart = nPos + 1; - insert(i, aNewWrong); - bRefIsValid = sal_False; // Reference no longer valid after Insert, the other was inserted in front of this position + WrongRange aNewWrong(rWrong.nStart, nPos); + rWrong.nStart = nPos + 1; + insert(begin() + i, aNewWrong); + // Reference no longer valid after Insert, the other + // was inserted in front of this position + bRefIsValid = false; ++i; // Not this again... } } // 3: Attribute starts at position .. - else if (i->nStart == nPos) + else if (rWrong.nStart == nPos) { - i->nEnd += nNew; + rWrong.nEnd += nNew; if ( bPosIsSep ) - ++(i->nStart); + ++(rWrong.nStart); } } - SAL_WARN_IF(bRefIsValid && i->nStart >= i->nEnd, "editeng", + SAL_WARN_IF(bRefIsValid && rWrong.nStart >= rWrong.nEnd, "editeng", "TextInserted, WrongRange: Start >= End?!"); (void)bRefIsValid; } commit aa2333374d8f587afa9e876334a1b6303bcec0a9 Author: Michael Stahl <mst...@redhat.com> Date: Fri Feb 3 13:34:07 2012 +0100 editeng: convert some DBG_ASSERTs diff --git a/editeng/source/editeng/edtspell.cxx b/editeng/source/editeng/edtspell.cxx index 77a65dd..f13fb1a 100644 --- a/editeng/source/editeng/edtspell.cxx +++ b/editeng/source/editeng/edtspell.cxx @@ -55,7 +55,7 @@ EditSpellWrapper::EditSpellWrapper( Window* _pWin, sal_Bool bIsStart, sal_Bool bIsAllRight, EditView* pView ) : SvxSpellWrapper( _pWin, xChecker, bIsStart, bIsAllRight ) { - DBG_ASSERT( pView, "One view has to be abandoned!" ); + SAL_WARN_IF( !pView, "editeng", "One view has to be abandoned!" ); // Keep IgnoreList, delete ReplaceList... if (SvxGetChangeAllList().is()) SvxGetChangeAllList()->clear(); @@ -283,11 +283,12 @@ void WrongList::TextInserted( sal_uInt16 nPos, sal_uInt16 nNew, sal_Bool bPosIsS ++(i->nStart); } } - DBG_ASSERT(!bRefIsValid || i->nStart < i->nEnd, "TextInserted, WrongRange: Start >= End?!"); + SAL_WARN_IF(bRefIsValid && i->nStart >= i->nEnd, "editeng", + "TextInserted, WrongRange: Start >= End?!"); (void)bRefIsValid; } - DBG_ASSERT( !DbgIsBuggy(), "InsertWrong: WrongList broken!" ); + SAL_WARN_IF(DbgIsBuggy(), "editeng", "InsertWrong: WrongList broken!"); } void WrongList::TextDeleted( sal_uInt16 nPos, sal_uInt16 nDeleted ) @@ -343,7 +344,8 @@ void WrongList::TextDeleted( sal_uInt16 nPos, sal_uInt16 nDeleted ) i->nEnd -= nDeleted; } } - DBG_ASSERT(i->nStart < i->nEnd, "TextInserted, WrongRange: Start >= End?!" ); + SAL_WARN_IF(i->nStart >= i->nEnd, "editeng", + "TextDeleted, WrongRange: Start >= End?!"); if ( bDelWrong ) { i = erase(i); @@ -354,7 +356,7 @@ void WrongList::TextDeleted( sal_uInt16 nPos, sal_uInt16 nDeleted ) } } - DBG_ASSERT( !DbgIsBuggy(), "InsertWrong: WrongList broken!" ); + SAL_WARN_IF(DbgIsBuggy(), "editeng", "TextDeleted: WrongList broken!"); } sal_Bool WrongList::NextWrong( sal_uInt16& rnStart, sal_uInt16& rnEnd ) const @@ -430,7 +432,7 @@ void WrongList::ClearWrongs( sal_uInt16 nStart, sal_uInt16 nEnd, } } - DBG_ASSERT( !DbgIsBuggy(), "InsertWrong: WrongList broken!" ); + SAL_WARN_IF(DbgIsBuggy(), "editeng", "ClearWrongs: WrongList broken!"); } void WrongList::InsertWrong( sal_uInt16 nStart, sal_uInt16 nEnd, @@ -448,7 +450,7 @@ void WrongList::InsertWrong( sal_uInt16 nStart, sal_uInt16 nEnd, // and runs along, but not that there are several ranges ... // Exactly in the range is no one allowed to be, otherwise this // Method can not be called! - DBG_ASSERT((i->nStart == nStart && i->nEnd > nEnd) || i->nStart > nEnd, "InsertWrong: RangeMismatch!"); + SAL_WARN_IF((i->nStart != nStart || i->nEnd <= nEnd) && i->nStart <= nEnd, "editeng", "InsertWrong: RangeMismatch!"); if (i->nStart == nStart && i->nEnd > nEnd) i->nStart = nEnd + 1; } @@ -461,7 +463,7 @@ void WrongList::InsertWrong( sal_uInt16 nStart, sal_uInt16 nEnd, else push_back(WrongRange(nStart, nEnd)); - DBG_ASSERT( !DbgIsBuggy(), "InsertWrong: WrongList broken!" ); + SAL_WARN_IF(DbgIsBuggy(), "editeng", "InsertWrong: WrongList broken!"); } void WrongList::MarkWrongsInvalid() @@ -544,7 +546,8 @@ sal_Bool EdtAutoCorrDoc::Delete( sal_uInt16 nStt, sal_uInt16 nEnd ) { EditSelection aSel( EditPaM( pCurNode, nStt ), EditPaM( pCurNode, nEnd ) ); pImpEE->ImpDeleteSelection( aSel ); - DBG_ASSERT( nCursor >= nEnd, "Cursor in the heart of the action?!" ); + SAL_WARN_IF(nCursor < nEnd, "editeng", + "Cursor in the heart of the action?!"); nCursor -= ( nEnd-nStt ); bAllowUndoAction = sal_False; return sal_True; @@ -554,7 +557,8 @@ sal_Bool EdtAutoCorrDoc::Insert( sal_uInt16 nPos, const String& rTxt ) { EditSelection aSel = EditPaM( pCurNode, nPos ); pImpEE->ImpInsertText( aSel, rTxt ); - DBG_ASSERT( nCursor >= nPos, "Cursor in the heart of the action?!" ); + SAL_WARN_IF(nCursor < nPos, "editeng", + "Cursor in the heart of the action?!"); nCursor = nCursor + rTxt.Len(); if ( bAllowUndoAction && ( rTxt.Len() == 1 ) ) @@ -624,7 +628,8 @@ sal_Bool EdtAutoCorrDoc::SetINetAttr( sal_uInt16 nStt, sal_uInt16 nEnd, EditSelection aSel( EditPaM( pCurNode, nStt ), EditPaM( pCurNode, nEnd ) ); String aText = pImpEE->GetSelected( aSel ); aSel = pImpEE->ImpDeleteSelection( aSel ); - DBG_ASSERT( nCursor >= nEnd, "Cursor in the heart of the action ?!" ); + SAL_WARN_IF(nCursor < nEnd, "editeng", + "Cursor in the heart of the action?!"); nCursor -= ( nEnd-nStt ); SvxFieldItem aField( SvxURLField( rURL, aText, SVXURLFORMAT_REPR ), EE_FEATURE_FIELD ); @@ -717,7 +722,8 @@ sal_Bool EdtAutoCorrDoc::ChgAutoCorrWord( sal_uInt16& rSttPos, EditSelection aSel( EditPaM( pCurNode, rSttPos ), EditPaM( pCurNode, nEndPos ) ); aSel = pImpEE->ImpDeleteSelection( aSel ); - DBG_ASSERT( nCursor >= nEndPos, "Cursor in the heart of the action?!" ); + SAL_WARN_IF(nCursor < nEndPos, "editeng", + "Cursor in the heart of the action?!"); nCursor -= ( nEndPos-rSttPos ); pImpEE->ImpInsertText( aSel, pFnd->GetLong() ); nCursor = nCursor + pFnd->GetLong().Len(); _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits