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

Takeshi Abe tabe at fixedpoint.jp
Mon Mar 17 19:56:44 PDT 2014


 vcl/source/gdi/cvtsvm.cxx   |   15 ++++------
 vcl/source/gdi/dibtools.cxx |   63 ++++++++++++++++++--------------------------
 2 files changed, 33 insertions(+), 45 deletions(-)

New commits:
commit bb17844099ba98a77c8e5d7a25c0c416a4b0641e
Author: Takeshi Abe <tabe at fixedpoint.jp>
Date:   Tue Mar 18 11:41:20 2014 +0900

    Avoid possible resource leaks by boost::scoped_array
    
    Change-Id: I54a175ce1e4cb624d94770ee849d97675987e7b2

diff --git a/vcl/source/gdi/cvtsvm.cxx b/vcl/source/gdi/cvtsvm.cxx
index d547cc1..598d800 100644
--- a/vcl/source/gdi/cvtsvm.cxx
+++ b/vcl/source/gdi/cvtsvm.cxx
@@ -30,6 +30,7 @@
 #include <rtl/strbuf.hxx>
 
 #include <cvtsvm.hxx>
+#include <boost/scoped_array.hpp>
 
 // Inlines
 void ImplReadRect( SvStream& rIStm, Rectangle& rRect )
@@ -851,7 +852,6 @@ void SVMConverter::ImplConvertFromSVM1( SvStream& rIStm, GDIMetaFile& rMtf )
 
                 case( GDI_TEXTARRAY_ACTION ):
                 {
-                    sal_Int32*  pDXAry = NULL;
                     sal_Int32   nIndex, nLen, nAryLen;
 
                     ReadPair( rIStm, aPt ).ReadInt32( nIndex ).ReadInt32( nLen ).ReadInt32( nTmp ).ReadInt32( nAryLen );
@@ -864,11 +864,12 @@ void SVMConverter::ImplConvertFromSVM1( SvStream& rIStm, GDIMetaFile& rMtf )
 
                         OUString aStr(OStringToOUString(aByteStr, eActualCharSet));
 
+                        boost::scoped_array<sal_Int32> pDXAry;
                         if (nAryLen > 0)
                         {
                             sal_Int32 nStrLen( aStr.getLength() );
 
-                            pDXAry = new sal_Int32[ std::max( nAryLen, nStrLen ) ];
+                            pDXAry.reset(new sal_Int32[ std::max( nAryLen, nStrLen ) ]);
 
                             for (sal_Int32 j = 0; j < nAryLen; ++j)
                                 rIStm.ReadInt32( nTmp ), pDXAry[ j ] = nTmp;
@@ -878,9 +879,9 @@ void SVMConverter::ImplConvertFromSVM1( SvStream& rIStm, GDIMetaFile& rMtf )
                             {
                                 if( nAryLen+1 == nStrLen )
                                 {
-                                    sal_Int32* pTmpAry = new sal_Int32[nStrLen];
+                                    boost::scoped_array<sal_Int32> pTmpAry(new sal_Int32[nStrLen]);
 
-                                    aFontVDev.GetTextArray( aStr, pTmpAry, nIndex, nLen );
+                                    aFontVDev.GetTextArray( aStr, pTmpAry.get(), nIndex, nLen );
 
                                     // now, the difference between the
                                     // last and the second last DX array
@@ -893,8 +894,6 @@ void SVMConverter::ImplConvertFromSVM1( SvStream& rIStm, GDIMetaFile& rMtf )
                                         pDXAry[ nStrLen-1 ] = pDXAry[ nStrLen-2 ] + pTmpAry[ nStrLen-1 ] - pTmpAry[ nStrLen-2 ];
                                     else
                                         pDXAry[ nStrLen-1 ] = pTmpAry[ nStrLen-1 ]; // len=1: 0th position taken to be 0
-
-                                    delete[] pTmpAry;
                                 }
     #ifdef DBG_UTIL
                                 else
@@ -904,9 +903,7 @@ void SVMConverter::ImplConvertFromSVM1( SvStream& rIStm, GDIMetaFile& rMtf )
                         }
                         if ( nUnicodeCommentActionNumber == i )
                             ImplReadUnicodeComment( nUnicodeCommentStreamPos, rIStm, aStr );
-                        rMtf.AddAction( new MetaTextArrayAction( aPt, aStr, pDXAry, nIndex, nLen ) );
-
-                        delete[] pDXAry;
+                        rMtf.AddAction( new MetaTextArrayAction( aPt, aStr, pDXAry.get(), nIndex, nLen ) );
                     }
                     rIStm.Seek( nActBegin + nActionSize );
                 }
diff --git a/vcl/source/gdi/dibtools.cxx b/vcl/source/gdi/dibtools.cxx
index 9802557..7d5d670 100644
--- a/vcl/source/gdi/dibtools.cxx
+++ b/vcl/source/gdi/dibtools.cxx
@@ -24,7 +24,7 @@
 #include <vcl/bitmapex.hxx>
 #include <vcl/bmpacc.hxx>
 #include <vcl/outdev.hxx>
-
+#include <boost/scoped_array.hpp>
 
 // - Defines -
 
@@ -260,10 +260,10 @@ bool ImplReadDIBPalette( SvStream& rIStm, BitmapWriteAccess& rAcc, bool bQuad )
     const sal_uLong     nPalSize = nColors * ( bQuad ? 4UL : 3UL );
     BitmapColor     aPalColor;
 
-    sal_uInt8* pEntries = new sal_uInt8[ nPalSize ];
-    rIStm.Read( pEntries, nPalSize );
+    boost::scoped_array<sal_uInt8> pEntries(new sal_uInt8[ nPalSize ]);
+    rIStm.Read( pEntries.get(), nPalSize );
 
-    sal_uInt8* pTmpEntry = pEntries;
+    sal_uInt8* pTmpEntry = pEntries.get();
     for( sal_uInt16 i = 0; i < nColors; i++ )
     {
         aPalColor.SetBlue( *pTmpEntry++ );
@@ -276,8 +276,6 @@ bool ImplReadDIBPalette( SvStream& rIStm, BitmapWriteAccess& rAcc, bool bQuad )
         rAcc.SetPaletteColor( i, aPalColor );
     }
 
-    delete[] pEntries;
-
     return( rIStm.GetError() == 0UL );
 }
 
@@ -447,7 +445,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
         {
             const long nWidth(rHeader.nWidth);
             const long nHeight(rHeader.nHeight);
-            sal_uInt8* pBuf = new sal_uInt8[nAlignedWidth];
+            boost::scoped_array<sal_uInt8> pBuf(new sal_uInt8[nAlignedWidth]);
 
             const long nI(bTopDown ? 1 : -1);
             long nY(bTopDown ? 0 : nHeight - 1);
@@ -462,7 +460,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
 
                     for( ; nCount--; nY += nI )
                     {
-                        rIStm.Read( pTmp = pBuf, nAlignedWidth );
+                        rIStm.Read( pTmp = pBuf.get(), nAlignedWidth );
                         cTmp = *pTmp++;
 
                         for( long nX = 0L, nShift = 8L; nX < nWidth; nX++ )
@@ -486,7 +484,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
 
                     for( ; nCount--; nY += nI )
                     {
-                        rIStm.Read( pTmp = pBuf, nAlignedWidth );
+                        rIStm.Read( pTmp = pBuf.get(), nAlignedWidth );
                         cTmp = *pTmp++;
 
                         for( long nX = 0L, nShift = 2L; nX < nWidth; nX++ )
@@ -509,7 +507,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
 
                     for( ; nCount--; nY += nI )
                     {
-                        rIStm.Read( pTmp = pBuf, nAlignedWidth );
+                        rIStm.Read( pTmp = pBuf.get(), nAlignedWidth );
 
                         for( long nX = 0L; nX < nWidth; nX++ )
                             rAcc.SetPixelIndex( nY, nX, *pTmp++ );
@@ -525,7 +523,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
 
                     for( ; nCount--; nY += nI )
                     {
-                        rIStm.Read( (char*)( pTmp16 = (sal_uInt16*) pBuf ), nAlignedWidth );
+                        rIStm.Read( (char*)( pTmp16 = (sal_uInt16*) pBuf.get() ), nAlignedWidth );
 
                         for( long nX = 0L; nX < nWidth; nX++ )
                         {
@@ -543,7 +541,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
 
                     for( ; nCount--; nY += nI )
                     {
-                        rIStm.Read( pTmp = pBuf, nAlignedWidth );
+                        rIStm.Read( pTmp = pBuf.get(), nAlignedWidth );
 
                         for( long nX = 0L; nX < nWidth; nX++ )
                         {
@@ -568,7 +566,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
 
                         for( ; nCount--; nY += nI )
                         {
-                            rIStm.Read( (char*)( pTmp32 = (sal_uInt32*) pBuf ), nAlignedWidth );
+                            rIStm.Read( (char*)( pTmp32 = (sal_uInt32*) pBuf.get() ), nAlignedWidth );
 
                             for( long nX = 0L; nX < nWidth; nX++ )
                             {
@@ -583,7 +581,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
                     {
                         for( ; nCount--; nY += nI )
                         {
-                            rIStm.Read( (char*)( pTmp32 = (sal_uInt32*) pBuf ), nAlignedWidth );
+                            rIStm.Read( (char*)( pTmp32 = (sal_uInt32*) pBuf.get() ), nAlignedWidth );
 
                             for( long nX = 0L; nX < nWidth; nX++ )
                             {
@@ -594,8 +592,6 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r
                     }
                 }
             }
-
-            delete[] pBuf;
         }
     }
 
@@ -794,8 +790,8 @@ bool ImplWriteDIBPalette( SvStream& rOStm, BitmapReadAccess& rAcc )
 {
     const sal_uInt16    nColors = rAcc.GetPaletteEntryCount();
     const sal_uLong     nPalSize = nColors * 4UL;
-    sal_uInt8*          pEntries = new sal_uInt8[ nPalSize ];
-    sal_uInt8*          pTmpEntry = pEntries;
+    boost::scoped_array<sal_uInt8> pEntries(new sal_uInt8[ nPalSize ]);
+    sal_uInt8*          pTmpEntry = pEntries.get();
     BitmapColor     aPalColor;
 
     for( sal_uInt16 i = 0; i < nColors; i++ )
@@ -808,8 +804,7 @@ bool ImplWriteDIBPalette( SvStream& rOStm, BitmapReadAccess& rAcc )
         *pTmpEntry++ = 0;
     }
 
-    rOStm.Write( pEntries, nPalSize );
-    delete[] pEntries;
+    rOStm.Write( pEntries.get(), nPalSize );
 
     return( rOStm.GetError() == 0UL );
 }
@@ -822,7 +817,7 @@ bool ImplWriteRLE( SvStream& rOStm, BitmapReadAccess& rAcc, bool bRLE4 )
     sal_uLong       nSaveIndex;
     sal_uLong       nCount;
     sal_uLong       nBufCount;
-    sal_uInt8*      pBuf = new sal_uInt8[ ( nWidth << 1 ) + 2 ];
+    boost::scoped_array<sal_uInt8> pBuf(new sal_uInt8[ ( nWidth << 1 ) + 2 ]);
     sal_uInt8*      pTmp;
     sal_uInt8       cPix;
     sal_uInt8       cLast;
@@ -830,7 +825,7 @@ bool ImplWriteRLE( SvStream& rOStm, BitmapReadAccess& rAcc, bool bRLE4 )
 
     for ( long nY = nHeight - 1L; nY >= 0L; nY-- )
     {
-        pTmp = pBuf;
+        pTmp = pBuf.get();
         nX = nBufCount = 0UL;
 
         while( nX < nWidth )
@@ -919,14 +914,12 @@ bool ImplWriteRLE( SvStream& rOStm, BitmapReadAccess& rAcc, bool bRLE4 )
         pBuf[ nBufCount++ ] = 0;
         pBuf[ nBufCount++ ] = 0;
 
-        rOStm.Write( pBuf, nBufCount );
+        rOStm.Write( pBuf.get(), nBufCount );
     }
 
     rOStm.WriteUChar( (sal_uInt8) 0 );
     rOStm.WriteUChar( (sal_uInt8) 1 );
 
-    delete[] pBuf;
-
     return( rOStm.GetError() == 0UL );
 }
 
@@ -1006,7 +999,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess& rAcc, BitmapReadAccess*
         {
             const long nWidth(rAcc.Width());
             const long nHeight(rAcc.Height());
-            sal_uInt8* pBuf = new sal_uInt8[ nAlignedWidth ];
+            boost::scoped_array<sal_uInt8> pBuf(new sal_uInt8[ nAlignedWidth ]);
             sal_uInt8* pTmp(0);
             sal_uInt8 cTmp(0);
 
@@ -1016,7 +1009,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess& rAcc, BitmapReadAccess*
                 {
                     for( long nY = nHeight - 1; nY >= 0L; nY-- )
                     {
-                        pTmp = pBuf;
+                        pTmp = pBuf.get();
                         cTmp = 0;
 
                         for( long nX = 0L, nShift = 8L; nX < nWidth; nX++ )
@@ -1032,7 +1025,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess& rAcc, BitmapReadAccess*
                         }
 
                         *pTmp = cTmp;
-                        rOStm.Write( pBuf, nAlignedWidth );
+                        rOStm.Write( pBuf.get(), nAlignedWidth );
                     }
                 }
                 break;
@@ -1041,7 +1034,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess& rAcc, BitmapReadAccess*
                 {
                     for( long nY = nHeight - 1; nY >= 0L; nY-- )
                     {
-                        pTmp = pBuf;
+                        pTmp = pBuf.get();
                         cTmp = 0;
 
                         for( long nX = 0L, nShift = 2L; nX < nWidth; nX++ )
@@ -1056,7 +1049,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess& rAcc, BitmapReadAccess*
                             cTmp |= rAcc.GetPixelIndex( nY, nX ) << ( --nShift << 2L );
                         }
                         *pTmp = cTmp;
-                        rOStm.Write( pBuf, nAlignedWidth );
+                        rOStm.Write( pBuf.get(), nAlignedWidth );
                     }
                 }
                 break;
@@ -1065,12 +1058,12 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess& rAcc, BitmapReadAccess*
                 {
                     for( long nY = nHeight - 1; nY >= 0L; nY-- )
                     {
-                        pTmp = pBuf;
+                        pTmp = pBuf.get();
 
                         for( long nX = 0L; nX < nWidth; nX++ )
                             *pTmp++ = rAcc.GetPixelIndex( nY, nX );
 
-                        rOStm.Write( pBuf, nAlignedWidth );
+                        rOStm.Write( pBuf.get(), nAlignedWidth );
                     }
                 }
                 break;
@@ -1085,7 +1078,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess& rAcc, BitmapReadAccess*
 
                     for( long nY = nHeight - 1; nY >= 0L; nY-- )
                     {
-                        pTmp = pBuf;
+                        pTmp = pBuf.get();
 
                         for( long nX = 0L; nX < nWidth; nX++ )
                         {
@@ -1103,13 +1096,11 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess& rAcc, BitmapReadAccess*
                             }
                         }
 
-                        rOStm.Write( pBuf, nAlignedWidth );
+                        rOStm.Write( pBuf.get(), nAlignedWidth );
                     }
                 }
                 break;
             }
-
-            delete[] pBuf;
         }
     }
 


More information about the Libreoffice-commits mailing list