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

Caolán McNamara caolanm at redhat.com
Wed Dec 10 09:14:27 PST 2014


 sw/source/core/layout/ssfrm.cxx |   26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

New commits:
commit 4de09a9efdb62cf90ce18662852e556cf7148e14
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Dec 10 17:12:08 2014 +0000

    coverity#738980 Use after free
    
    Change-Id: I30657eb609a9d02217238dd37a3f23e05168569c

diff --git a/sw/source/core/layout/ssfrm.cxx b/sw/source/core/layout/ssfrm.cxx
index dbda7c1..02f834f 100644
--- a/sw/source/core/layout/ssfrm.cxx
+++ b/sw/source/core/layout/ssfrm.cxx
@@ -457,7 +457,10 @@ void SwLayoutFrm::Destroy()
                 // #i28701#
                 SwAnchoredObject* pAnchoredObj = (*pFrm->GetDrawObjs())[0];
                 if ( pAnchoredObj->ISA(SwFlyFrm) )
+                {
                     delete pAnchoredObj;
+                    assert(!pFrm->GetDrawObjs() || nCnt > pFrm->GetDrawObjs()->size());
+                }
                 else
                 {
                     SdrObject* pSdrObj = pAnchoredObj->DrawObj();
@@ -469,11 +472,12 @@ void SwLayoutFrm::Destroy()
                     {
                         pContact->DisconnectObjFromLayout( pSdrObj );
                     }
-                }
-                if ( pFrm->GetDrawObjs() &&
-                     nCnt == pFrm->GetDrawObjs()->size() )
-                {
-                    pFrm->GetDrawObjs()->Remove( *pAnchoredObj );
+
+                    if ( pFrm->GetDrawObjs() &&
+                         nCnt == pFrm->GetDrawObjs()->size() )
+                    {
+                        pFrm->GetDrawObjs()->Remove( *pAnchoredObj );
+                    }
                 }
             }
             pFrm->Remove();
@@ -488,7 +492,10 @@ void SwLayoutFrm::Destroy()
             // #i28701#
             SwAnchoredObject* pAnchoredObj = (*GetDrawObjs())[0];
             if ( pAnchoredObj->ISA(SwFlyFrm) )
+            {
                 delete pAnchoredObj;
+                assert(!GetDrawObjs() || nCnt > GetDrawObjs()->size());
+            }
             else
             {
                 SdrObject* pSdrObj = pAnchoredObj->DrawObj();
@@ -500,10 +507,11 @@ void SwLayoutFrm::Destroy()
                 {
                     pContact->DisconnectObjFromLayout( pSdrObj );
                 }
-            }
-            if ( GetDrawObjs() && nCnt == GetDrawObjs()->size() )
-            {
-                GetDrawObjs()->Remove( *pAnchoredObj );
+
+                if ( GetDrawObjs() && nCnt == GetDrawObjs()->size() )
+                {
+                    GetDrawObjs()->Remove( *pAnchoredObj );
+                }
             }
         }
     }


More information about the Libreoffice-commits mailing list