gdiplus: Fix cleanup after errors in GdipCloneImage.

Vincent Povirk madewokherd+8cd9 at gmail.com
Sun Dec 6 20:12:57 CST 2009


-- 
Vincent Povirk
-------------- next part --------------
From f559e81f891f77822589d981c575b7a8e7d0d7c8 Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Sun, 6 Dec 2009 20:07:40 -0600
Subject: [PATCH 2/2] gdiplus: Fix cleanup after errors in GdipCloneImage.

The Dispose/Unlock calls do not match the original Create/Lock calls.
---
 dlls/gdiplus/image.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index 22895c7..73a6bd6 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -746,12 +746,14 @@ GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage)
                 GdipBitmapUnlockBits((GpBitmap*)*cloneImage, &lockeddata_dst);
             }
 
-            GdipBitmapUnlockBits(bitmap, &lockeddata_src);
+            if (stat != Ok)
+                GdipDisposeImage(*cloneImage);
         }
 
+        GdipBitmapUnlockBits(bitmap, &lockeddata_src);
+
         if (stat != Ok)
         {
-            GdipDisposeImage(*cloneImage);
             *cloneImage = NULL;
         }
         else memcpy(&(*cloneImage)->format, &image->format, sizeof(GUID));
-- 
1.6.3.3


More information about the wine-patches mailing list