[PATCH] fix proposed for fdo#48683

julien2412 serval2412 at yahoo.fr
Sat Apr 14 06:59:43 PDT 2012


Hello,

I reproduced the problem indicated by fdo#48683, attached :
- bt with symbols
(https://bugs.freedesktop.org/attachment.cgi?id=59969&action=edit)
- valgrind logs
(https://bugs.freedesktop.org/attachment.cgi?id=59970&action=edit)

Here are the lines of editeng/source/editeng/impedit3.cxx which seem to
cause the problem :
  2421         TextPortion* pTP = 0;
   2422         for ( nPortion = 0; nPortion < nPortions; nPortion++ )
   2423         {
   2424             pTP = pParaPortion->GetTextPortions()[ nPortion ];
   2425             if ( ( nPos+pTP->GetLen() ) > nStartPos )
   2426             {
   2427                 DBG_ASSERT( nPos <= nStartPos, "Wrong Start!" );
   2428                 DBG_ASSERT( nPos+pTP->GetLen() >= nEnd, "Wrong End!"
);
   2429                 break;
   2430             }
   2431             nPos = nPos + pTP->GetLen();
   2432         }
   2433         DBG_ASSERT( pTP, "RecalcTextPortion: Portion not found" );
   2434         if ( ( nPos == nStartPos ) && ( (nPos+pTP->GetLen()) == nEnd
) )
   2435         {
   2436             // Remove portion;
   2437             sal_uInt8 nType = pTP->GetKind();
   2438             pParaPortion->GetTextPortions().Remove( nPortion );
   2439             delete pTP;

Since pTP corresponds to the address of pParaPortion->GetTextPortions()[
nPortion ]
I wonder if these both lines wouldn't be incompatible:
- pParaPortion->GetTextPortions().Remove( nPortion );
- delete pTP;

So I propose this easy fix:
diff --git a/editeng/source/editeng/impedit3.cxx
b/editeng/source/editeng/impedit3.cxx
index 0d6877b..2c557da 100644
--- a/editeng/source/editeng/impedit3.cxx
+++ b/editeng/source/editeng/impedit3.cxx
@@ -2436,7 +2436,6 @@ void ImpEditEngine::RecalcTextPortion( ParaPortion*
pParaPortion, sal_uInt16 nSt
             // Remove portion;
             sal_uInt8 nType = pTP->GetKind();
             pParaPortion->GetTextPortions().Remove( nPortion );
-            delete pTP;
             if ( nType == PORTIONKIND_LINEBREAK )
             {
                 TextPortion* pNext = pParaPortion->GetTextPortions()[
nPortion ];

I can commit and push on master of course but I'd like first your opinion
about this since I could missed something.

Julien.

--
View this message in context: http://nabble.documentfoundation.org/PATCH-fix-proposed-for-fdo-48683-tp3910199p3910199.html
Sent from the Dev mailing list archive at Nabble.com.


More information about the LibreOffice mailing list