[Libreoffice-commits] core.git: 2 commits - sax/source starmath/source
Caolán McNamara
caolanm at redhat.com
Sun Dec 10 15:29:25 UTC 2017
sax/source/expatwrap/sax_expat.cxx | 73 ++++++++++++++++---------------------
starmath/source/parse.cxx | 28 +++++++-------
2 files changed, 47 insertions(+), 54 deletions(-)
New commits:
commit 6ff9b5a63f4857703ba1974cfe2c46e34e744e26
Author: Caolán McNamara <caolanm at redhat.com>
Date: Sun Dec 10 11:17:40 2017 +0000
ofz#4571 more Direct-leaks
Change-Id: If845238c3c107a9edc95dc3663bf4c178e65ebc7
Reviewed-on: https://gerrit.libreoffice.org/46180
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/starmath/source/parse.cxx b/starmath/source/parse.cxx
index 05412fa8e13a..4a9dd64a0bc8 100644
--- a/starmath/source/parse.cxx
+++ b/starmath/source/parse.cxx
@@ -1636,9 +1636,9 @@ SmStructureNode *SmParser::DoUnOper()
bool bIsPostfix = eType == TFACT;
std::unique_ptr<SmStructureNode> pSNode;
- SmNode *pOper = nullptr,
- *pExtra = nullptr,
- *pArg;
+ std::unique_ptr<SmNode> xOper;
+ std::unique_ptr<SmNode> xExtra;
+ std::unique_ptr<SmNode> xArg;
switch (eType)
{
@@ -1649,7 +1649,7 @@ SmStructureNode *SmParser::DoUnOper()
case TNROOT :
NextToken();
- pExtra = DoPower();
+ xExtra.reset(DoPower());
break;
case TUOPER :
@@ -1657,7 +1657,7 @@ SmStructureNode *SmParser::DoUnOper()
//Let the glyph know what it is...
m_aCurToken.eType = TUOPER;
m_aCurToken.nGroup = TG::UnOper;
- pOper = DoGlyphSpecial();
+ xOper.reset(DoGlyphSpecial());
break;
case TPLUS :
@@ -1666,7 +1666,7 @@ SmStructureNode *SmParser::DoUnOper()
case TMINUSPLUS :
case TNEG :
case TFACT :
- pOper = DoOpSubSup();
+ xOper.reset(DoOpSubSup());
break;
default :
@@ -1674,7 +1674,7 @@ SmStructureNode *SmParser::DoUnOper()
}
// get argument
- pArg = DoPower();
+ xArg.reset(DoPower());
if (eType == TABS)
{
@@ -1687,27 +1687,27 @@ SmStructureNode *SmParser::DoUnOper()
aNodeToken.eType = TABS;
aNodeToken.cMathChar = MS_VERTLINE;
- SmNode* pLeft = new SmMathSymbolNode(aNodeToken);
+ std::unique_ptr<SmNode> xLeft(new SmMathSymbolNode(aNodeToken));
aNodeToken.cMathChar = MS_VERTLINE;
- SmNode* pRight = new SmMathSymbolNode(aNodeToken);
+ std::unique_ptr<SmNode> xRight(new SmMathSymbolNode(aNodeToken));
- pSNode->SetSubNodes(pLeft, pArg, pRight);
+ pSNode->SetSubNodes(xLeft.release(), xArg.release(), xRight.release());
}
else if (eType == TSQRT || eType == TNROOT)
{
pSNode.reset(new SmRootNode(aNodeToken));
- pOper = new SmRootSymbolNode(aNodeToken);
- pSNode->SetSubNodes(pExtra, pOper, pArg);
+ xOper.reset(new SmRootSymbolNode(aNodeToken));
+ pSNode->SetSubNodes(xExtra.release(), xOper.release(), xArg.release());
}
else
{
pSNode.reset(new SmUnHorNode(aNodeToken));
if (bIsPostfix)
- pSNode->SetSubNodes(pArg, pOper);
+ pSNode->SetSubNodes(xArg.release(), xOper.release());
else
// prefix operator
- pSNode->SetSubNodes(pOper, pArg);
+ pSNode->SetSubNodes(xOper.release(), xArg.release());
}
return pSNode.release();
}
commit 4aa0600449b82a419ccd6ffd8d3061fbfea3d1c2
Author: Caolán McNamara <caolanm at redhat.com>
Date: Sun Dec 10 11:10:10 2017 +0000
ofz#4571 Direct-leak
Change-Id: I1fbeec6a29854dbc80736ed442941f55bc1bb0a3
Reviewed-on: https://gerrit.libreoffice.org/46179
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/sax/source/expatwrap/sax_expat.cxx b/sax/source/expatwrap/sax_expat.cxx
index 25e9c032878f..2c8466646c53 100644
--- a/sax/source/expatwrap/sax_expat.cxx
+++ b/sax/source/expatwrap/sax_expat.cxx
@@ -384,6 +384,28 @@ SaxExpatParser::initialize(css::uno::Sequence< css::uno::Any > const& rArguments
}
}
+namespace
+{
+ class ParserCleanup
+ {
+ private:
+ SaxExpatParser_Impl& m_rParser;
+ Entity& m_rEntity;
+ public:
+ ParserCleanup(SaxExpatParser_Impl& rParser, Entity& rEntity)
+ : m_rParser(rParser)
+ , m_rEntity(rEntity)
+ {
+ }
+ ~ParserCleanup()
+ {
+ m_rParser.popEntity();
+ //XML_ParserFree accepts a null arg
+ XML_ParserFree(m_rEntity.pParser);
+ }
+ };
+}
+
/***************
*
* parseStream does Parser-startup initializations. The SaxExpatParser_Impl::parse() method does
@@ -451,50 +473,21 @@ void SaxExpatParser::parseStream( const InputSource& structSource)
m_pImpl->exception = SAXParseException();
m_pImpl->pushEntity( entity );
- try
- {
- // start the document
- if( m_pImpl->rDocumentHandler.is() ) {
- m_pImpl->rDocumentHandler->setDocumentLocator( m_pImpl->rDocumentLocator );
- m_pImpl->rDocumentHandler->startDocument();
- }
- m_pImpl->parse();
+ ParserCleanup aEnsureFree(*m_pImpl, entity);
- // finish document
- if( m_pImpl->rDocumentHandler.is() ) {
- m_pImpl->rDocumentHandler->endDocument();
- }
- }
-// catch( SAXParseException &e )
-// {
-// m_pImpl->popEntity();
-// XML_ParserFree( entity.pParser );
-// css::uno::Any aAny;
-// aAny <<= e;
-// throw SAXException( e.Message, e.Context, aAny );
-// }
- catch( SAXException & )
- {
- m_pImpl->popEntity();
- XML_ParserFree( entity.pParser );
- throw;
- }
- catch( IOException & )
- {
- m_pImpl->popEntity();
- XML_ParserFree( entity.pParser );
- throw;
- }
- catch( css::uno::RuntimeException & )
- {
- m_pImpl->popEntity();
- XML_ParserFree( entity.pParser );
- throw;
+ // start the document
+ if( m_pImpl->rDocumentHandler.is() ) {
+ m_pImpl->rDocumentHandler->setDocumentLocator( m_pImpl->rDocumentLocator );
+ m_pImpl->rDocumentHandler->startDocument();
}
- m_pImpl->popEntity();
- XML_ParserFree( entity.pParser );
+ m_pImpl->parse();
+
+ // finish document
+ if( m_pImpl->rDocumentHandler.is() ) {
+ m_pImpl->rDocumentHandler->endDocument();
+ }
}
void SaxExpatParser::setDocumentHandler(const css::uno::Reference< XDocumentHandler > & xHandler)
More information about the Libreoffice-commits
mailing list