[Libreoffice-commits] core.git: Branch 'libreoffice-4-3' - vcl/win

Oliver-Rainer Wittmann orw at apache.org
Fri Jun 6 08:42:21 PDT 2014


 vcl/win/source/gdi/salbmp.cxx |   38 +++++++++++++++++++++++---------------
 1 file changed, 23 insertions(+), 15 deletions(-)

New commits:
commit e0c9b690074cd476b03169397cbf1969f2239c1e
Author: Oliver-Rainer Wittmann <orw at apache.org>
Date:   Fri Jun 6 12:07:49 2014 +0000

    Resolves: #i125000# check last status of newly created...
    
    <Gdiplus::Bitmap> instance before using it.
    
    (cherry picked from commit b127235917610b9c68e19df29bb39af496906569)
    
    Change-Id: I97364cf963424b0e8d0b52b3c995bd4defdca067
    (cherry picked from commit adb1bb21f804c62004f31ad5473d4cf447436b9b)

diff --git a/vcl/win/source/gdi/salbmp.cxx b/vcl/win/source/gdi/salbmp.cxx
index 30606d8..445839e 100644
--- a/vcl/win/source/gdi/salbmp.cxx
+++ b/vcl/win/source/gdi/salbmp.cxx
@@ -317,24 +317,32 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap()
 
         if(pRetval)
         {
-            sal_uInt8* pSrcRGB(pRGB->mpBits);
-            const sal_uInt32 nExtraRGB(pRGB->mnScanlineSize - (nW * 3));
-            const bool bTopDown(pRGB->mnFormat & BMP_FORMAT_TOP_DOWN);
-            const Gdiplus::Rect aAllRect(0, 0, nW, nH);
-            Gdiplus::BitmapData aGdiPlusBitmapData;
-            pRetval->LockBits(&aAllRect, Gdiplus::ImageLockModeWrite, PixelFormat24bppRGB, &aGdiPlusBitmapData);
-
-            // copy data to Gdiplus::Bitmap; format is BGR here in both cases, so memcpy is possible
-            for(sal_uInt32 y(0); y < nH; y++)
+            if ( pRetval->GetLastStatus() == Gdiplus::Ok )
             {
-                const sal_uInt32 nYInsert(bTopDown ? y : nH - y - 1);
-                sal_uInt8* targetPixels = (sal_uInt8*)aGdiPlusBitmapData.Scan0 + (nYInsert * aGdiPlusBitmapData.Stride);
+                sal_uInt8* pSrcRGB(pRGB->mpBits);
+                const sal_uInt32 nExtraRGB(pRGB->mnScanlineSize - (nW * 3));
+                const bool bTopDown(pRGB->mnFormat & BMP_FORMAT_TOP_DOWN);
+                const Gdiplus::Rect aAllRect(0, 0, nW, nH);
+                Gdiplus::BitmapData aGdiPlusBitmapData;
+                pRetval->LockBits(&aAllRect, Gdiplus::ImageLockModeWrite, PixelFormat24bppRGB, &aGdiPlusBitmapData);
+
+                // copy data to Gdiplus::Bitmap; format is BGR here in both cases, so memcpy is possible
+                for(sal_uInt32 y(0); y < nH; y++)
+                {
+                    const sal_uInt32 nYInsert(bTopDown ? y : nH - y - 1);
+                    sal_uInt8* targetPixels = (sal_uInt8*)aGdiPlusBitmapData.Scan0 + (nYInsert * aGdiPlusBitmapData.Stride);
 
-                memcpy(targetPixels, pSrcRGB, nW * 3);
-                pSrcRGB += nW * 3 + nExtraRGB;
-            }
+                    memcpy(targetPixels, pSrcRGB, nW * 3);
+                    pSrcRGB += nW * 3 + nExtraRGB;
+                }
 
-            pRetval->UnlockBits(&aGdiPlusBitmapData);
+                pRetval->UnlockBits(&aGdiPlusBitmapData);
+            }
+            else
+            {
+                delete pRetval;
+                pRetval = NULL;
+            }
         }
     }
 


More information about the Libreoffice-commits mailing list