Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hello,

Scan coverity detected this: 
22. pass_freed_arg: Passing freed pointer "pAnchoredObj" as an argument to
function "SwSortedObjs::Remove(SwAnchoredObject &)".

This problem appears twice in the file:
    576                 SwAnchoredObject* pAnchoredObj =
(*pFrm->GetDrawObjs())[0];
    577                 if ( pAnchoredObj->ISA(SwFlyFrm) )
    578                     delete pAnchoredObj;
    579                 else
    580                 {
    581                     SdrObject* pSdrObj = pAnchoredObj->DrawObj();
    582                     SwDrawContact* pContact =
    583                            
static_cast<SwDrawContact*>(pSdrObj->GetUserCall());
    584                     OSL_ENSURE( pContact,
    585                             "<SwFrm::~SwFrm> - missing contact for
drawing object" );
    586                     if ( pContact )
    587                     {
    588                         pContact->DisconnectObjFromLayout( pSdrObj
);
    589                     }
    590                 }
    591                 if ( pFrm->GetDrawObjs() &&
    592                      nCnt == pFrm->GetDrawObjs()->Count() )
    593                 {
    594                     pFrm->GetDrawObjs()->Remove( *pAnchoredObj ); 
//// pAnchoredObj has been deleted!
    595                 }


and here (same logic):
    608             SwAnchoredObject* pAnchoredObj = (*GetDrawObjs())[0];
    609             if ( pAnchoredObj->ISA(SwFlyFrm) )
    610                 delete pAnchoredObj;
    611             else
    612             {
    613                 SdrObject* pSdrObj = pAnchoredObj->DrawObj();
    614                 SwDrawContact* pContact =
    615                        
static_cast<SwDrawContact*>(pSdrObj->GetUserCall());
    616                 OSL_ENSURE( pContact,
    617                         "<SwFrm::~SwFrm> - missing contact for
drawing object" );
    618                 if ( pContact )
    619                 {
    620                     pContact->DisconnectObjFromLayout( pSdrObj );
    621                 }
    622             }
    623             if ( GetDrawObjs() && nCnt == GetDrawObjs()->Count() )
    624             {
    625                 GetDrawObjs()->Remove( *pAnchoredObj );  ////
pAnchoredObj has been deleted!
    626             }

Should "delete pAnchoredObj;" be followed by pAnchoredObj = null; in the if
part
then  if ( GetDrawObjs() && nCnt == GetDrawObjs()->Count() ) should be
replaced by:
 if ( GetDrawObjs() && nCnt == GetDrawObjs()->Count()  && pAnchoredObj) ?

Or:
 if ( GetDrawObjs() && nCnt == GetDrawObjs()->Count() ) part included in
else block?

Or should it be otherwise?

Julien 



--
View this message in context: 
http://nabble.documentfoundation.org/About-coverity-738980-ssfrm-cxx-from-sw-module-tp4044145.html
Sent from the Dev mailing list archive at Nabble.com.

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.