From 4da62012fea1796c1fed5bb2d87a353d1be79ea5 Mon Sep 17 00:00:00 2001 From: Takeshi Abe <tabe@fixedpoint.jp> Date: Thu, 3 Apr 2014 13:28:47 +0900 Subject: Fix a memory leak by freeing last pBytes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I7d170d704fa8950057698856d12df63992e38381 Reviewed-on: https://gerrit.libreoffice.org/8822 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com> --- extensions/source/plugin/base/nfuncs.cxx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'extensions/source') diff --git a/extensions/source/plugin/base/nfuncs.cxx b/extensions/source/plugin/base/nfuncs.cxx index d56e02a9b7f5..796a4a1f03ac 100644 --- a/extensions/source/plugin/base/nfuncs.cxx +++ b/extensions/source/plugin/base/nfuncs.cxx @@ -44,6 +44,7 @@ #include <plugin/impl.hxx> #include <vcl/svapp.hxx> +#include <boost/scoped_array.hpp> #if OSL_DEBUG_LEVEL > 1 #include <osl/thread.h> @@ -425,20 +426,19 @@ extern "C" { return NPERR_FILE_NOT_FOUND; PluginInputStream* pInputStream = (PluginInputStream*)pStream; - sal_Int8* pBytes = NULL; + boost::scoped_array<sal_Int8> pBytes; int nBytes = 0; pPlugin->enterPluginCallback(); while( rangeList ) { if( pBytes && nBytes < (int)rangeList->length ) - { - delete [] pBytes; - pBytes = NULL; + pBytes.reset(); + if( ! pBytes ) { + nBytes = rangeList->length; + pBytes.reset(new sal_Int8[ nBytes ]); } - if( ! pBytes ) - pBytes = new sal_Int8[ nBytes = rangeList->length ]; int nRead = - pInputStream->read( rangeList->offset, pBytes, rangeList->length ); + pInputStream->read( rangeList->offset, pBytes.get(), rangeList->length ); int nPos = 0; int nNow; do @@ -451,7 +451,7 @@ extern "C" { stream, rangeList->offset + nPos, nNow, - pBytes+nPos ); + pBytes.get()+nPos ); nPos += nNow; nRead -= nNow; } while( nRead > 0 && nNow ); -- cgit