diff options
author | Takeshi Abe <tabe@fixedpoint.jp> | 2014-04-14 21:28:02 +0900 |
---|---|---|
committer | Takeshi Abe <tabe@fixedpoint.jp> | 2014-04-14 21:47:43 +0900 |
commit | fbf5599c071c6f3203f8992aba4560be9b3b5e42 (patch) | |
tree | f15465bdebc3b9d424b010ae1afc8960401c875e | |
parent | e04c36b4591ffa457f3072ea8d3c0c72211d20c7 (diff) |
Avoid possible memory leaks in case of exceptions
Change-Id: Id71cb49d8aa241a17efd4cbe217a48f2d7c34e84
-rw-r--r-- | filter/source/xsltfilter/LibXSLTTransformer.cxx | 7 | ||||
-rw-r--r-- | filter/source/xsltfilter/OleHandler.cxx | 9 | ||||
-rw-r--r-- | forms/source/component/EventThread.cxx | 8 | ||||
-rw-r--r-- | forms/source/richtext/richtextengine.cxx | 5 |
4 files changed, 14 insertions, 15 deletions
diff --git a/filter/source/xsltfilter/LibXSLTTransformer.cxx b/filter/source/xsltfilter/LibXSLTTransformer.cxx index 949f383c1f47..82ac99f9e7dd 100644 --- a/filter/source/xsltfilter/LibXSLTTransformer.cxx +++ b/filter/source/xsltfilter/LibXSLTTransformer.cxx @@ -47,6 +47,7 @@ #include <LibXSLTTransformer.hxx> #include <OleHandler.hxx> +#include <boost/scoped_ptr.hpp> using namespace ::rtl; using namespace ::cppu; @@ -307,11 +308,11 @@ namespace XSLT xsltSetGenericDebugFunc(stderr, NULL); xsltDebugDumpExtensions(NULL); #endif - OleHandler* oh = new OleHandler(m_transformer->getComponentContext()); + boost::scoped_ptr<OleHandler> oh(new OleHandler(m_transformer->getComponentContext())); if (styleSheet) { tcontext = xsltNewTransformContext(styleSheet, doc); - tcontext->_private = static_cast<void *> (oh); + tcontext->_private = static_cast<void *> (oh.get()); xsltQuoteUserParams(tcontext, ¶ms[0]); result = xsltApplyStylesheetUser(styleSheet, doc, 0, 0, 0, tcontext); @@ -340,7 +341,7 @@ namespace XSLT m_transformer->error(msg); } closeOutput(); - delete(oh); + oh.reset(); xsltFreeStylesheet(styleSheet); xsltFreeTransformContext(tcontext); xmlFreeDoc(doc); diff --git a/filter/source/xsltfilter/OleHandler.cxx b/filter/source/xsltfilter/OleHandler.cxx index 4610f7628621..151517405652 100644 --- a/filter/source/xsltfilter/OleHandler.cxx +++ b/filter/source/xsltfilter/OleHandler.cxx @@ -41,6 +41,7 @@ #include <com/sun/star/embed/XTransactedObject.hpp> #include <OleHandler.hxx> +#include <boost/scoped_ptr.hpp> using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; @@ -128,12 +129,12 @@ namespace XSLT } // Decompress the bytes - ::ZipUtils::Inflater* decompresser = new ::ZipUtils::Inflater(false); + boost::scoped_ptr< ::ZipUtils::Inflater> decompresser(new ::ZipUtils::Inflater(false)); decompresser->setInput(content); Sequence<sal_Int8> result(oleLength); decompresser->doInflateSegment(result, 0, oleLength); decompresser->end(); - delete decompresser; + decompresser.reset(); //return the base64 string of the uncompressed data OUStringBuffer buf(oleLength); ::sax::Converter::encodeBase64(buf, result); @@ -196,11 +197,11 @@ namespace XSLT // Compress the bytes Sequence<sal_Int8> output(oledata.getLength()); - ::ZipUtils::Deflater* compresser = new ::ZipUtils::Deflater((sal_Int32) 3, false); + boost::scoped_ptr< ::ZipUtils::Deflater> compresser(new ::ZipUtils::Deflater((sal_Int32) 3, false)); compresser->setInputSegment(oledata, 0, oledata.getLength()); compresser->finish(); int compressedDataLength = compresser->doDeflateSegment(output, 0, oledata.getLength()); - delete(compresser); + compresser.reset(); //realloc the data length Sequence<sal_Int8> compressed(compressedDataLength); for (int i = 0; i < compressedDataLength; i++) { diff --git a/forms/source/component/EventThread.cxx b/forms/source/component/EventThread.cxx index 6a5b0a6c0e0e..d385ee893b43 100644 --- a/forms/source/component/EventThread.cxx +++ b/forms/source/component/EventThread.cxx @@ -20,7 +20,7 @@ #include "EventThread.hxx" #include <comphelper/guarding.hxx> #include <tools/debug.hxx> - +#include <boost/scoped_ptr.hpp> namespace frm { @@ -176,7 +176,7 @@ void OComponentEventThread::run() ::cppu::OComponentHelper *pCompImpl = m_pCompImpl; ThreadEvents::iterator firstEvent( m_aEvents.begin() ); - EventObject* pEvt = *firstEvent; + boost::scoped_ptr<EventObject> pEvt(*firstEvent); m_aEvents.erase( firstEvent ); ThreadObjects::iterator firstControl( m_aControls.begin() ); @@ -196,10 +196,8 @@ void OComponentEventThread::run() query_interface(xControlAdapter->queryAdapted(), xControl); if( xComp.is() ) - processEvent( pCompImpl, pEvt, xControl, bFlag ); + processEvent( pCompImpl, pEvt.get(), xControl, bFlag ); } - - delete pEvt; }; // After a Dispose, we do not know the Control anymore. diff --git a/forms/source/richtext/richtextengine.cxx b/forms/source/richtext/richtextengine.cxx index 4712a61fbf13..1a1cb0cb6250 100644 --- a/forms/source/richtext/richtextengine.cxx +++ b/forms/source/richtext/richtextengine.cxx @@ -35,7 +35,7 @@ #include <algorithm> #include <functional> - +#include <boost/scoped_ptr.hpp> namespace frm { @@ -85,14 +85,13 @@ namespace frm RichTextEngine* pClone( NULL ); { SolarMutexGuard aGuard; - EditTextObject* pMyText = CreateTextObject(); + boost::scoped_ptr<EditTextObject> pMyText(CreateTextObject()); OSL_ENSURE( pMyText, "RichTextEngine::Clone: CreateTextObject returned nonsense!" ); pClone = Create(); if ( pMyText ) pClone->SetText( *pMyText ); - delete pMyText; } return pClone; |