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 /filter | |
parent | e04c36b4591ffa457f3072ea8d3c0c72211d20c7 (diff) |
Avoid possible memory leaks in case of exceptions
Change-Id: Id71cb49d8aa241a17efd4cbe217a48f2d7c34e84
Diffstat (limited to 'filter')
-rw-r--r-- | filter/source/xsltfilter/LibXSLTTransformer.cxx | 7 | ||||
-rw-r--r-- | filter/source/xsltfilter/OleHandler.cxx | 9 |
2 files changed, 9 insertions, 7 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++) { |