[Libreoffice-commits] .: vcl/source

Norbert Thiebaud nthiebaud at kemper.freedesktop.org
Thu Jan 5 01:27:21 PST 2012


 vcl/source/gdi/bitmap3.cxx |   76 +++++++++++++++++++++++----------------------
 1 file changed, 39 insertions(+), 37 deletions(-)

New commits:
commit bb0438f010893b6bc083aac6c1037f9a80ae8add
Author: Norbert Thiebaud <nthiebaud at gmail.com>
Date:   Thu Jan 5 03:24:16 2012 -0600

    potential null pointer dereference

diff --git a/vcl/source/gdi/bitmap3.cxx b/vcl/source/gdi/bitmap3.cxx
index 19f5f25..a2b8587 100644
--- a/vcl/source/gdi/bitmap3.cxx
+++ b/vcl/source/gdi/bitmap3.cxx
@@ -949,63 +949,65 @@ sal_Bool Bitmap::ImplScaleFast( const double& rScaleX, const double& rScaleY )
     const Size  aSizePix( GetSizePixel() );
     const long  nNewWidth = FRound( aSizePix.Width() * rScaleX );
     const long  nNewHeight = FRound( aSizePix.Height() * rScaleY );
-    sal_Bool        bRet = sal_False;
+    sal_Bool    bRet = sal_False;
 
     if( nNewWidth && nNewHeight )
     {
         BitmapReadAccess*   pReadAcc = AcquireReadAccess();
-        Bitmap              aNewBmp( Size( nNewWidth, nNewHeight ), GetBitCount(), &pReadAcc->GetPalette() );
-        BitmapWriteAccess*  pWriteAcc = aNewBmp.AcquireWriteAccess();
 
-        if( pReadAcc && pWriteAcc )
+        if(pReadAcc)
         {
-            const long  nScanlineSize = pWriteAcc->GetScanlineSize();
-            const long  nNewWidth1 = nNewWidth - 1L;
-            const long  nNewHeight1 = nNewHeight - 1L;
-            const long  nWidth = pReadAcc->Width();
-            const long  nHeight = pReadAcc->Height();
-            long*       pLutX = new long[ nNewWidth ];
-            long*       pLutY = new long[ nNewHeight ];
-
-            if( nNewWidth1 && nNewHeight1 )
-            {
-                long        nX, nY, nMapY, nActY = 0L;
-
-                for( nX = 0L; nX < nNewWidth; nX++ )
-                    pLutX[ nX ] = nX * nWidth / nNewWidth;
-
-                for( nY = 0L; nY < nNewHeight; nY++ )
-                    pLutY[ nY ] = nY * nHeight / nNewHeight;
+            Bitmap              aNewBmp( Size( nNewWidth, nNewHeight ), GetBitCount(), &pReadAcc->GetPalette() );
+            BitmapWriteAccess*  pWriteAcc = aNewBmp.AcquireWriteAccess();
 
-                while( nActY < nNewHeight )
+            if( pWriteAcc )
+            {
+                const long  nScanlineSize = pWriteAcc->GetScanlineSize();
+                const long  nNewWidth1 = nNewWidth - 1L;
+                const long  nNewHeight1 = nNewHeight - 1L;
+                const long  nWidth = pReadAcc->Width();
+                const long  nHeight = pReadAcc->Height();
+                long*       pLutX = new long[ nNewWidth ];
+                long*       pLutY = new long[ nNewHeight ];
+
+                if( nNewWidth1 && nNewHeight1 )
                 {
-                    nMapY = pLutY[ nActY ];
+                    long        nX, nY, nMapY, nActY = 0L;
 
                     for( nX = 0L; nX < nNewWidth; nX++ )
-                        pWriteAcc->SetPixel( nActY, nX, pReadAcc->GetPixel( nMapY , pLutX[ nX ] ) );
+                        pLutX[ nX ] = nX * nWidth / nNewWidth;
+
+                    for( nY = 0L; nY < nNewHeight; nY++ )
+                        pLutY[ nY ] = nY * nHeight / nNewHeight;
 
-                    while( ( nActY < nNewHeight1 ) && ( pLutY[ nActY + 1 ] == nMapY ) )
+                    while( nActY < nNewHeight )
                     {
-                        memcpy( pWriteAcc->GetScanline( nActY + 1L ),
-                                 pWriteAcc->GetScanline( nActY ), nScanlineSize );
+                        nMapY = pLutY[ nActY ];
+
+                        for( nX = 0L; nX < nNewWidth; nX++ )
+                            pWriteAcc->SetPixel( nActY, nX, pReadAcc->GetPixel( nMapY , pLutX[ nX ] ) );
+
+                        while( ( nActY < nNewHeight1 ) && ( pLutY[ nActY + 1 ] == nMapY ) )
+                        {
+                            memcpy( pWriteAcc->GetScanline( nActY + 1L ),
+                                    pWriteAcc->GetScanline( nActY ), nScanlineSize );
+                            nActY++;
+                        }
                         nActY++;
                     }
 
-                    nActY++;
+                    bRet = sal_True;
+                    aNewBmp.ReleaseAccess( pWriteAcc );
                 }
 
-                bRet = sal_True;
+                delete[] pLutX;
+                delete[] pLutY;
             }
+            ReleaseAccess( pReadAcc );
 
-            delete[] pLutX;
-            delete[] pLutY;
+            if( bRet )
+                ImplAssignWithSize( aNewBmp );
         }
-
-        ReleaseAccess( pReadAcc );
-        aNewBmp.ReleaseAccess( pWriteAcc );
-
-        if( bRet )
-            ImplAssignWithSize( aNewBmp );
     }
 
     return bRet;


More information about the Libreoffice-commits mailing list