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
- About coverity 738980 (ssfrm.cxx from sw module) · julien2412
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.