[Libreoffice-commits] core.git: basic/source

Takeshi Abe tabe at fixedpoint.jp
Wed Jul 16 02:02:16 PDT 2014


 basic/source/classes/image.cxx |   17 +++++++++--------
 basic/source/classes/sb.cxx    |    5 +++--
 basic/source/comp/dim.cxx      |    8 +++-----
 3 files changed, 15 insertions(+), 15 deletions(-)

New commits:
commit d97b5e420fdb18e9c99403ac66c429fb80a2f27f
Author: Takeshi Abe <tabe at fixedpoint.jp>
Date:   Wed Jul 16 17:41:15 2014 +0900

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

diff --git a/basic/source/classes/image.cxx b/basic/source/classes/image.cxx
index ae016b1..784a1c5 100644
--- a/basic/source/classes/image.cxx
+++ b/basic/source/classes/image.cxx
@@ -25,6 +25,8 @@
 #include <string.h>
 #include "image.hxx"
 #include <codegen.hxx>
+#include <boost/scoped_array.hpp>
+
 SbiImage::SbiImage()
 {
     pStringOff = NULL;
@@ -206,15 +208,14 @@ bool SbiImage::Load( SvStream& r, sal_uInt32& nVersion )
                     pStrings = new sal_Unicode[ nLen ];
                     nStringSize = (sal_uInt16) nLen;
 
-                    char* pByteStrings = new char[ nLen ];
-                    r.Read( pByteStrings, nStringSize );
+                    boost::scoped_array<char> pByteStrings(new char[ nLen ]);
+                    r.Read( pByteStrings.get(), nStringSize );
                     for( short j = 0; j < nStrings; j++ )
                     {
                         sal_uInt16 nOff2 = (sal_uInt16) pStringOff[ j ];
-                        OUString aStr( pByteStrings + nOff2, strlen(pByteStrings + nOff2), eCharSet );
+                        OUString aStr( pByteStrings.get() + nOff2, strlen(pByteStrings.get() + nOff2), eCharSet );
                         memcpy( pStrings + nOff2, aStr.getStr(), (aStr.getLength() + 1) * sizeof( sal_Unicode ) );
                     }
-                    delete[] pByteStrings;
                 }
                 break;
             case B_MODEND:
@@ -324,17 +325,17 @@ bool SbiImage::Save( SvStream& r, sal_uInt32 nVer )
             r.WriteUInt32( (sal_uInt32) pStringOff[ i ] );
         }
         // Then the String-Block
-        char* pByteStrings = new char[ nStringSize ];
+        boost::scoped_array<char> pByteStrings(new char[ nStringSize ]);
         for( i = 0; i < nStrings; i++ )
         {
             sal_uInt16 nOff = (sal_uInt16) pStringOff[ i ];
             OString aStr(OUStringToOString(OUString(pStrings + nOff), eCharSet));
-            memcpy( pByteStrings + nOff, aStr.getStr(), (aStr.getLength() + 1) * sizeof( char ) );
+            memcpy( pByteStrings.get() + nOff, aStr.getStr(), (aStr.getLength() + 1) * sizeof( char ) );
         }
         r.WriteUInt32( (sal_uInt32) nStringSize );
-        r.Write( pByteStrings, nStringSize );
+        r.Write( pByteStrings.get(), nStringSize );
 
-        delete[] pByteStrings;
+        pByteStrings.reset();
         SbiCloseRecord( r, nPos );
     }
     // Set overall length
diff --git a/basic/source/classes/sb.cxx b/basic/source/classes/sb.cxx
index 922df3e..61a1d72 100644
--- a/basic/source/classes/sb.cxx
+++ b/basic/source/classes/sb.cxx
@@ -46,6 +46,7 @@
 #include <com/sun/star/util/XCloseBroadcaster.hpp>
 #include <com/sun/star/util/XCloseListener.hpp>
 #include "errobject.hxx"
+#include <boost/scoped_array.hpp>
 #include <boost/unordered_map.hpp>
 
 #include <com/sun/star/script/ModuleType.hpp>
@@ -1872,7 +1873,7 @@ bool StarBASIC::LoadData( SvStream& r, sal_uInt16 nVer )
     // #95459 Delete dialogs, otherwise endless recursion
     // in SbxVarable::GetType() if dialogs are accessed
     sal_uInt16 nObjCount = pObjs->Count();
-    SbxVariable** ppDeleteTab = new SbxVariable*[ nObjCount ];
+    boost::scoped_array<SbxVariable*> ppDeleteTab(new SbxVariable*[ nObjCount ]);
     sal_uInt16 nObj;
 
     for( nObj = 0 ; nObj < nObjCount ; nObj++ )
@@ -1889,7 +1890,7 @@ bool StarBASIC::LoadData( SvStream& r, sal_uInt16 nVer )
             pObjs->Remove( pVar );
         }
     }
-    delete[] ppDeleteTab;
+    ppDeleteTab.reset();
 
     sal_uInt16 nMod;
     pModules->Clear();
diff --git a/basic/source/comp/dim.cxx b/basic/source/comp/dim.cxx
index e5e4c16..a662515 100644
--- a/basic/source/comp/dim.cxx
+++ b/basic/source/comp/dim.cxx
@@ -588,7 +588,7 @@ void SbiParser::DefType( bool bPrivate )
 
     SbxObject *pType = new SbxObject(aSym);
 
-    SbiSymDef* pElem;
+    boost::scoped_ptr<SbiSymDef> pElem;
     SbiDimList* pDim = NULL;
     bool bDone = false;
 
@@ -597,19 +597,17 @@ void SbiParser::DefType( bool bPrivate )
         switch( Peek() )
         {
             case ENDTYPE :
-                pElem = NULL;
                 bDone = true;
                 Next();
             break;
 
             case EOLN :
             case REM :
-                pElem = NULL;
                 Next();
             break;
 
             default:
-                pElem = VarDecl(&pDim, false, false);
+                pElem.reset(VarDecl(&pDim, false, false));
                 if( !pElem )
                     bDone = true;   // Error occurred
         }
@@ -678,7 +676,7 @@ void SbiParser::DefType( bool bPrivate )
                 pTypeMembers->Insert( pTypeElem, pTypeMembers->Count() );
             }
             delete pDim, pDim = NULL;
-            delete pElem;
+            pElem.reset();
         }
     }
 


More information about the Libreoffice-commits mailing list