[Libreoffice-commits] core.git: sal/cppunittester sal/textenc sax/source

Takeshi Abe tabe at fixedpoint.jp
Wed Apr 23 08:14:23 PDT 2014


 sal/cppunittester/cppunittester.cxx |   10 +++++-----
 sal/textenc/tencinfo.cxx            |   23 +++++++++--------------
 sax/source/expatwrap/saxwriter.cxx  |    7 ++++---
 sax/source/expatwrap/xml2utf.cxx    |   26 +++++++++-----------------
 4 files changed, 27 insertions(+), 39 deletions(-)

New commits:
commit 1ec836760853e9e220d471cf39f2533f0828f00e
Author: Takeshi Abe <tabe at fixedpoint.jp>
Date:   Thu Apr 24 00:09:19 2014 +0900

    Avoid possible memory leaks in case of exceptions
    
    Change-Id: I047fd88a89900153089a55b6af123f11fb8bde55

diff --git a/sal/cppunittester/cppunittester.cxx b/sal/cppunittester/cppunittester.cxx
index f4c2fc6..f8b9d64 100644
--- a/sal/cppunittester/cppunittester.cxx
+++ b/sal/cppunittester/cppunittester.cxx
@@ -47,6 +47,7 @@
 
 #include "boost/noncopyable.hpp"
 #include "boost/ptr_container/ptr_vector.hpp"
+#include <boost/scoped_array.hpp>
 #include "boost/static_assert.hpp"
 
 namespace {
@@ -108,9 +109,9 @@ class EyecatcherListener
 public:
     void startTest( CppUnit::Test* test) SAL_OVERRIDE
     {
-        char* tn = new char [ test->getName().length() + 2 ];
-        strcpy(tn, test->getName().c_str());
-        int len = strlen(tn);
+        boost::scoped_array<char> tn(new char [ test->getName().length() + 2 ]);
+        strcpy(tn.get(), test->getName().c_str());
+        int len = strlen(tn.get());
         for(int i = 0; i < len; i++)
         {
             if(!isalnum(tn[i]))
@@ -120,8 +121,7 @@ public:
         }
         tn[len] = '_';
         tn[len + 1] = 0;
-        setenv("LO_TESTNAME", tn, true);
-        delete[] tn;
+        setenv("LO_TESTNAME", tn.get(), true);
     }
 
     void endTest( CppUnit::Test* /* test */ ) SAL_OVERRIDE
diff --git a/sal/textenc/tencinfo.cxx b/sal/textenc/tencinfo.cxx
index ccbfe40..0aaa2ff 100644
--- a/sal/textenc/tencinfo.cxx
+++ b/sal/textenc/tencinfo.cxx
@@ -26,6 +26,7 @@
 
 #include "gettextencodingdata.hxx"
 #include "tenchelp.hxx"
+#include <boost/scoped_array.hpp>
 
 sal_Bool SAL_CALL rtl_isOctetTextEncoding(rtl_TextEncoding nEncoding)
 {
@@ -407,20 +408,19 @@ rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromUnixCharset( const char* pUnixC
     };
 
     rtl_TextEncoding    eEncoding = RTL_TEXTENCODING_DONTKNOW;
-    char*           pBuf;
     char*           pTempBuf;
     sal_uInt32          nBufLen = strlen( pUnixCharset )+1;
     const char*     pFirstPart;
     const char*     pSecondPart;
 
     /* Alloc Buffer and map to lower case */
-    pBuf = new char[nBufLen];
-    Impl_toAsciiLower( pUnixCharset, pBuf );
+    boost::scoped_array<char> pBuf(new char[nBufLen]);
+    Impl_toAsciiLower( pUnixCharset, pBuf.get() );
 
     /* Search FirstPart */
-    pFirstPart = pBuf;
+    pFirstPart = pBuf.get();
     pSecondPart = NULL;
-    pTempBuf = pBuf;
+    pTempBuf = pBuf.get();
     while ( *pTempBuf )
     {
         if ( *pTempBuf == '-' )
@@ -463,8 +463,6 @@ rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromUnixCharset( const char* pUnixC
         }
     }
 
-    delete[] pBuf;
-
     return eEncoding;
 }
 
@@ -740,18 +738,17 @@ rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromMimeCharset( const char* pMimeC
     };
 
     rtl_TextEncoding            eEncoding = RTL_TEXTENCODING_DONTKNOW;
-    char*                   pBuf;
     const ImplStrCharsetDef*    pData = aVIPMimeCharsetTab;
     sal_uInt32                  nBufLen = strlen( pMimeCharset )+1;
 
     /* Alloc Buffer and map to lower case and remove non alphanumeric chars */
-    pBuf = new char[nBufLen];
-    Impl_toAsciiLowerAndRemoveNonAlphanumeric( pMimeCharset, pBuf );
+    boost::scoped_array<char> pBuf(new char[nBufLen]);
+    Impl_toAsciiLowerAndRemoveNonAlphanumeric( pMimeCharset, pBuf.get() );
 
     /* Search for equal in the VIP table */
     while ( pData->mpCharsetStr )
     {
-        if ( strcmp( pBuf, pData->mpCharsetStr ) == 0 )
+        if ( strcmp( pBuf.get(), pData->mpCharsetStr ) == 0 )
         {
             eEncoding = pData->meTextEncoding;
             break;
@@ -766,7 +763,7 @@ rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromMimeCharset( const char* pMimeC
         pData = aMimeCharsetTab;
         while ( pData->mpCharsetStr )
         {
-            if ( Impl_matchString( pBuf, pData->mpCharsetStr ) )
+            if ( Impl_matchString( pBuf.get(), pData->mpCharsetStr ) )
             {
                 eEncoding = pData->meTextEncoding;
                 break;
@@ -776,8 +773,6 @@ rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromMimeCharset( const char* pMimeC
         }
     }
 
-    delete[] pBuf;
-
     return eEncoding;
 }
 
diff --git a/sax/source/expatwrap/saxwriter.cxx b/sax/source/expatwrap/saxwriter.cxx
index 140bcfb..4dee83d 100644
--- a/sax/source/expatwrap/saxwriter.cxx
+++ b/sax/source/expatwrap/saxwriter.cxx
@@ -49,6 +49,7 @@ using namespace ::com::sun::star::util;
 using namespace ::com::sun::star::io;
 
 #include "xml2utf.hxx"
+#include <boost/scoped_array.hpp>
 
 namespace com { namespace sun { namespace star { namespace uno {
     class XComponentContext;
@@ -493,11 +494,11 @@ inline void SaxWriterHelper::insertIndentation(sal_uInt32 m_nLevel) throw( SAXEx
         else
         {
             sal_uInt32 nCount(m_nLevel + 1);
-            sal_Int8* pBytes = new sal_Int8[nCount];
+            boost::scoped_array<sal_Int8> pBytes(new sal_Int8[nCount]);
             pBytes[0] = LINEFEED;
             memset( &(pBytes[1]), 32, m_nLevel );
-            AddBytes(mp_Sequence, nCurrentPos, pBytes, nCount);
-            delete[] pBytes;
+            AddBytes(mp_Sequence, nCurrentPos, pBytes.get(), nCount);
+            pBytes.reset();
             nLastLineFeedPos = nCurrentPos - nCount;
             if (nCurrentPos == SEQUENCESIZE)
                 nCurrentPos = writeSequence();
diff --git a/sax/source/expatwrap/xml2utf.cxx b/sax/source/expatwrap/xml2utf.cxx
index 90e55dc..8a13823 100644
--- a/sax/source/expatwrap/xml2utf.cxx
+++ b/sax/source/expatwrap/xml2utf.cxx
@@ -32,6 +32,7 @@ using namespace ::com::sun::star::io;
 
 
 #include "xml2utf.hxx"
+#include <boost/scoped_array.hpp>
 
 namespace sax_expatwrap {
 
@@ -394,14 +395,14 @@ Sequence<sal_Unicode> Text2UnicodeConverter::convert( const Sequence<sal_Int8> &
     Sequence<sal_Unicode>   seqUnicode ( nSourceSize );
 
     const sal_Int8 *pbSource = seqText.getConstArray();
-    sal_Int8 *pbTempMem = 0;
+    boost::scoped_array<sal_Int8> pbTempMem;
 
     if( m_seqSource.getLength() ) {
         // put old rest and new byte sequence into one array
-        pbTempMem = new sal_Int8[ nSourceSize ];
-        memcpy( pbTempMem , m_seqSource.getConstArray() , m_seqSource.getLength() );
+        pbTempMem.reset(new sal_Int8[ nSourceSize ]);
+        memcpy( pbTempMem.get() , m_seqSource.getConstArray() , m_seqSource.getLength() );
         memcpy( &(pbTempMem[ m_seqSource.getLength() ]) , seqText.getConstArray() , seqText.getLength() );
-        pbSource = pbTempMem;
+        pbSource = pbTempMem.get();
 
         // set to zero again
         m_seqSource = Sequence< sal_Int8 >();
@@ -436,11 +437,6 @@ Sequence<sal_Unicode> Text2UnicodeConverter::convert( const Sequence<sal_Int8> &
         memcpy( m_seqSource.getArray() , &(pbSource[nSourceCount]) , nSourceSize-nSourceCount );
     }
 
-
-    if( pbTempMem ) {
-        delete [] pbTempMem;
-    }
-
     // set to correct unicode size
     seqUnicode.realloc( nTargetCount );
 
@@ -471,7 +467,7 @@ Unicode2TextConverter::~Unicode2TextConverter()
 
 Sequence<sal_Int8> Unicode2TextConverter::convert(const sal_Unicode *puSource , sal_Int32 nSourceSize)
 {
-    sal_Unicode *puTempMem = 0;
+    boost::scoped_array<sal_Unicode> puTempMem;
 
     if( m_seqSource.getLength() ) {
         // For surrogates !
@@ -479,15 +475,15 @@ Sequence<sal_Int8> Unicode2TextConverter::convert(const sal_Unicode *puSource ,
         // In general when surrogates are used, they should be rarely
         // cut off between two convert()-calls. So this code is used
         // rarely and the extra copy is acceptable.
-        puTempMem = new sal_Unicode[ nSourceSize + m_seqSource.getLength()];
-        memcpy( puTempMem ,
+        puTempMem.reset(new sal_Unicode[ nSourceSize + m_seqSource.getLength()]);
+        memcpy( puTempMem.get() ,
                 m_seqSource.getConstArray() ,
                 m_seqSource.getLength() * sizeof( sal_Unicode ) );
         memcpy(
             &(puTempMem[ m_seqSource.getLength() ]) ,
             puSource ,
             nSourceSize*sizeof( sal_Unicode ) );
-        puSource = puTempMem;
+        puSource = puTempMem.get();
         nSourceSize += m_seqSource.getLength();
 
         m_seqSource = Sequence< sal_Unicode > ();
@@ -539,10 +535,6 @@ Sequence<sal_Int8> Unicode2TextConverter::convert(const sal_Unicode *puSource ,
                 (nSourceSize - nSourceCount) * sizeof( sal_Unicode ) );
     }
 
-    if( puTempMem ) {
-        delete [] puTempMem;
-    }
-
     // reduce the size of the buffer (fast, no copy necessary)
     seqText.realloc( nTargetCount );
 


More information about the Libreoffice-commits mailing list