Kaydet (Commit) fe1f258d authored tarafından Takeshi Abe's avatar Takeshi Abe Kaydeden (comit) David Tardon

fix memory leak of pointers contained in m_aErrDescList

Change-Id: I9fcbdcd54978ccaffa5359c0afb0a1990356c218
Reviewed-on: https://gerrit.libreoffice.org/12205Reviewed-by: 's avatarDavid Tardon <dtardon@redhat.com>
Tested-by: 's avatarDavid Tardon <dtardon@redhat.com>
üst d4ca8958
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
#include "types.hxx" #include "types.hxx"
#include <vector> #include <boost/ptr_container/ptr_vector.hpp>
class SmNode; class SmNode;
...@@ -157,7 +157,7 @@ struct SmErrorDesc ...@@ -157,7 +157,7 @@ struct SmErrorDesc
typedef ::std::stack< SmNode* > SmNodeStack; typedef ::std::stack< SmNode* > SmNodeStack;
typedef ::std::vector< SmErrorDesc* > SmErrDescList; typedef boost::ptr_vector< SmErrorDesc > SmErrDescList;
/**************************************************************************/ /**************************************************************************/
......
...@@ -2406,8 +2406,6 @@ SmNode *SmParser::Parse(const OUString &rBuffer) ...@@ -2406,8 +2406,6 @@ SmNode *SmParser::Parse(const OUString &rBuffer)
m_nColOff = 0; m_nColOff = 0;
m_nCurError = -1; m_nCurError = -1;
for ( size_t i = 0, n = m_aErrDescList.size(); i < n; ++i )
delete m_aErrDescList[ i ];
m_aErrDescList.clear(); m_aErrDescList.clear();
while ( !m_aNodeStack.empty() ) while ( !m_aNodeStack.empty() )
...@@ -2430,8 +2428,6 @@ SmNode *SmParser::ParseExpression(const OUString &rBuffer) ...@@ -2430,8 +2428,6 @@ SmNode *SmParser::ParseExpression(const OUString &rBuffer)
m_nColOff = 0; m_nColOff = 0;
m_nCurError = -1; m_nCurError = -1;
for ( size_t i = 0, n = m_aErrDescList.size(); i < n; ++i )
delete m_aErrDescList[ i ];
m_aErrDescList.clear(); m_aErrDescList.clear();
while ( !m_aNodeStack.empty() ) while ( !m_aNodeStack.empty() )
...@@ -2485,11 +2481,11 @@ size_t SmParser::AddError(SmParseError Type, SmNode *pNode) ...@@ -2485,11 +2481,11 @@ size_t SmParser::AddError(SmParseError Type, SmNode *pNode)
const SmErrorDesc *SmParser::NextError() const SmErrorDesc *SmParser::NextError()
{ {
if ( !m_aErrDescList.empty() ) if ( !m_aErrDescList.empty() )
if (m_nCurError > 0) return m_aErrDescList[ --m_nCurError ]; if (m_nCurError > 0) return &m_aErrDescList[ --m_nCurError ];
else else
{ {
m_nCurError = 0; m_nCurError = 0;
return m_aErrDescList[ m_nCurError ]; return &m_aErrDescList[ m_nCurError ];
} }
else return NULL; else return NULL;
} }
...@@ -2498,11 +2494,11 @@ const SmErrorDesc *SmParser::NextError() ...@@ -2498,11 +2494,11 @@ const SmErrorDesc *SmParser::NextError()
const SmErrorDesc *SmParser::PrevError() const SmErrorDesc *SmParser::PrevError()
{ {
if ( !m_aErrDescList.empty() ) if ( !m_aErrDescList.empty() )
if (m_nCurError < (int) (m_aErrDescList.size() - 1)) return m_aErrDescList[ ++m_nCurError ]; if (m_nCurError < (int) (m_aErrDescList.size() - 1)) return &m_aErrDescList[ ++m_nCurError ];
else else
{ {
m_nCurError = (int) (m_aErrDescList.size() - 1); m_nCurError = (int) (m_aErrDescList.size() - 1);
return m_aErrDescList[ m_nCurError ]; return &m_aErrDescList[ m_nCurError ];
} }
else return NULL; else return NULL;
} }
...@@ -2511,10 +2507,10 @@ const SmErrorDesc *SmParser::PrevError() ...@@ -2511,10 +2507,10 @@ const SmErrorDesc *SmParser::PrevError()
const SmErrorDesc *SmParser::GetError(size_t i) const SmErrorDesc *SmParser::GetError(size_t i)
{ {
if ( i < m_aErrDescList.size() ) if ( i < m_aErrDescList.size() )
return m_aErrDescList[ i ]; return &m_aErrDescList[ i ];
if ( (size_t)m_nCurError < m_aErrDescList.size() ) if ( (size_t)m_nCurError < m_aErrDescList.size() )
return m_aErrDescList[ m_nCurError ]; return &m_aErrDescList[ m_nCurError ];
return NULL; return NULL;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment