diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-02-27 14:24:37 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2017-02-27 14:25:39 +0000 |
commit | b06e2b7ef157affa71fe60f4b064f67b11024213 (patch) | |
tree | 51e2a33ed12fcdb54fb0a1fe1eef7515ecd9ee32 /lotuswordpro | |
parent | 4d73a7227f4f341aece7ab3376823f70a3e87d71 (diff) |
ofz: fix leak
Change-Id: I00e73eabb34ae98088a8e88d0c8677bf236a5e09
Diffstat (limited to 'lotuswordpro')
-rw-r--r-- | lotuswordpro/source/filter/lwpidxmgr.cxx | 60 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwpidxmgr.hxx | 8 |
2 files changed, 24 insertions, 44 deletions
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<LwpKey*>::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<LwpKey*> vObjIndexs; + std::vector<LwpKey> 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<LwpKey*> m_ObjectKeys; //the <id, offset> ordered vector - std::vector<LwpKey*> m_RootObjs; //For those object ids in RootObjIndex - std::vector<sal_uInt32> m_TimeTable; //Time table for object low id compression + std::vector<LwpKey> m_ObjectKeys; //the <id, offset> ordered vector + std::vector<LwpKey> m_RootObjs; //For those object ids in RootObjIndex + std::vector<sal_uInt32> m_TimeTable; //Time table for object low id compression //sal_uInt16 m_nKeyCount; sal_uInt32 m_nKeyCount; //the count of all object |