From b06e2b7ef157affa71fe60f4b064f67b11024213 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Mon, 27 Feb 2017 14:24:37 +0000 Subject: ofz: fix leak Change-Id: I00e73eabb34ae98088a8e88d0c8677bf236a5e09 --- lotuswordpro/source/filter/lwpidxmgr.cxx | 60 +++++++++++--------------------- lotuswordpro/source/filter/lwpidxmgr.hxx | 8 ++--- 2 files changed, 24 insertions(+), 44 deletions(-) (limited to 'lotuswordpro') diff --git a/lotuswordpro/source/filter/lwpidxmgr.cxx b/lotuswordpro/source/filter/lwpidxmgr.cxx index ff7fc215b194..640c42f04aa9 100644 --- a/lotuswordpro/source/filter/lwpidxmgr.cxx +++ b/lotuswordpro/source/filter/lwpidxmgr.cxx @@ -73,30 +73,13 @@ const sal_uInt8 LwpIndexManager::MAXOBJECTIDS = 255; LwpIndexManager::LwpIndexManager() - :m_nKeyCount(0), m_nLeafCount(0) + : m_nKeyCount(0) + , m_nLeafCount(0) { - m_TempVec.resize( LwpIndexManager::MAXOBJECTIDS ); } -LwpIndexManager::~LwpIndexManager() -{ - //Clear m_ObjectKeys - std::vector::iterator it; - - for( it = m_ObjectKeys.begin(); it != m_ObjectKeys.end(); ++it ) - { - LwpKey* pKey = *it; - if( pKey ) - { - delete pKey; - pKey = nullptr; - } - } - m_ObjectKeys.clear(); -} - /** * @descr Read all index records, VO_ROOTLEAFOBJINDEX, VO_ROOTOBJINDEX, VO_LEAFOBJINDEX */ @@ -159,21 +142,20 @@ void LwpIndexManager::ReadRootData(LwpObjectStream* pObjStrm) if (KeyCount) { //read object keys - LwpKey* akey = new LwpKey; - akey->id.Read(pObjStrm); + LwpKey akey; + akey.id.Read(pObjStrm); m_RootObjs.push_back(akey); sal_uInt16 k = 0; for (k = 1; k < KeyCount; k++) { - akey = new LwpKey; - akey->id.ReadCompressed(pObjStrm, m_RootObjs[k-1]->id); + akey.id.ReadCompressed(pObjStrm, m_RootObjs[k-1].id); m_RootObjs.push_back(akey); } for (k = 0; k < KeyCount; k++) - m_RootObjs[k]->offset = pObjStrm->QuickReaduInt32(); + m_RootObjs[k].offset = pObjStrm->QuickReaduInt32(); //read leaf index offset for (k = 0; k < m_nLeafCount; k++) @@ -193,25 +175,24 @@ void LwpIndexManager::ReadObjIndexData(LwpObjectStream* pObjStrm) sal_uInt16 KeyCount = pObjStrm->QuickReaduInt16(); sal_uInt16 LeafCount = KeyCount + 1; - std::vector vObjIndexs; + std::vector vObjIndexs; if(KeyCount) { - LwpKey* akey = new LwpKey; - akey->id.Read(pObjStrm); + LwpKey akey; + akey.id.Read(pObjStrm); vObjIndexs.push_back(akey); sal_uInt16 k = 0; for (k = 1; k < KeyCount; k++) { - akey = new LwpKey; - akey->id.ReadCompressed(pObjStrm, vObjIndexs[k-1]->id); + akey.id.ReadCompressed(pObjStrm, vObjIndexs[k-1].id); vObjIndexs.push_back(akey); } for (k = 0; k < KeyCount; k++) - vObjIndexs[k]->offset = pObjStrm->QuickReaduInt32(); + vObjIndexs[k].offset = pObjStrm->QuickReaduInt32(); for (k = 0; k < LeafCount; k++) m_TempVec.at(k) = pObjStrm->QuickReaduInt32(); @@ -281,20 +262,19 @@ void LwpIndexManager::ReadLeafData( LwpObjectStream *pObjStrm ) if(KeyCount) { - LwpKey* akey = new LwpKey; + LwpKey akey; //read object keys: id & offset - akey->id.Read(pObjStrm); + akey.id.Read(pObjStrm); m_ObjectKeys.push_back(akey); for (sal_uInt16 k = 1; k < KeyCount; k++) { - akey = new LwpKey; - akey->id.ReadCompressed(pObjStrm, m_ObjectKeys.at(m_nKeyCount+k-1)->id); + akey.id.ReadCompressed(pObjStrm, m_ObjectKeys.at(m_nKeyCount+k-1).id); m_ObjectKeys.push_back(akey); } for (sal_uInt16 j = 0; j < KeyCount; j++) - m_ObjectKeys.at(m_nKeyCount+j)->offset = pObjStrm->QuickReaduInt32(); + m_ObjectKeys.at(m_nKeyCount+j).offset = pObjStrm->QuickReaduInt32(); } m_nKeyCount += KeyCount; } @@ -326,17 +306,17 @@ sal_uInt32 LwpIndexManager::GetObjOffset( LwpObjectID objid ) { M = (L + U) >> 1; - if (objid.GetLow() > m_ObjectKeys[M]->id.GetLow()) + if (objid.GetLow() > m_ObjectKeys[M].id.GetLow()) L = M + 1; - else if (objid.GetLow() < m_ObjectKeys[M]->id.GetLow()) + else if (objid.GetLow() < m_ObjectKeys[M].id.GetLow()) U = M; - else if (objid.GetHigh() > m_ObjectKeys[M]->id.GetHigh()) + else if (objid.GetHigh() > m_ObjectKeys[M].id.GetHigh()) L = M + 1; - else if (objid.GetHigh() < m_ObjectKeys[M]->id.GetHigh()) + else if (objid.GetHigh() < m_ObjectKeys[M].id.GetHigh()) U = M; else { - return(m_ObjectKeys[M]->offset); + return(m_ObjectKeys[M].offset); } } return BAD_OFFSET; diff --git a/lotuswordpro/source/filter/lwpidxmgr.hxx b/lotuswordpro/source/filter/lwpidxmgr.hxx index c07bb984bcbf..b87a3367cb74 100644 --- a/lotuswordpro/source/filter/lwpidxmgr.hxx +++ b/lotuswordpro/source/filter/lwpidxmgr.hxx @@ -73,6 +73,7 @@ struct LwpKey LwpObjectID id; sal_uInt32 offset = 0; }; + /** * @brief LwpIndexManager, to read all index records and maintain the index information */ @@ -80,12 +81,11 @@ class LwpIndexManager { public: LwpIndexManager(); - ~LwpIndexManager(); protected: static const sal_uInt8 MAXOBJECTIDS; - std::vector m_ObjectKeys; //the ordered vector - std::vector m_RootObjs; //For those object ids in RootObjIndex - std::vector m_TimeTable; //Time table for object low id compression + std::vector m_ObjectKeys; //the ordered vector + std::vector m_RootObjs; //For those object ids in RootObjIndex + std::vector m_TimeTable; //Time table for object low id compression //sal_uInt16 m_nKeyCount; sal_uInt32 m_nKeyCount; //the count of all object -- cgit