[1/2] gdiplus: Add error checking to GdipClonePen.

Vincent Povirk madewokherd at gmail.com
Wed Aug 14 16:39:56 CDT 2013


-------------- next part --------------
From 373d6f6e1e2464df61975f3f8dfa98667d7dd9d0 Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Wed, 14 Aug 2013 16:34:25 -0500
Subject: [PATCH 1/2] gdiplus: Add error checking to GdipClonePen.

---
 dlls/gdiplus/pen.c | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/dlls/gdiplus/pen.c b/dlls/gdiplus/pen.c
index a022cfb..80ede40 100644
--- a/dlls/gdiplus/pen.c
+++ b/dlls/gdiplus/pen.c
@@ -87,6 +87,8 @@ static GpPenType bt_to_pt(GpBrushType bt)
 
 GpStatus WINGDIPAPI GdipClonePen(GpPen *pen, GpPen **clonepen)
 {
+    GpStatus stat;
+
     TRACE("(%p, %p)\n", pen, clonepen);
 
     if(!pen || !clonepen)
@@ -97,9 +99,24 @@ GpStatus WINGDIPAPI GdipClonePen(GpPen *pen, GpPen **clonepen)
 
     **clonepen = *pen;
 
-    GdipCloneCustomLineCap(pen->customstart, &(*clonepen)->customstart);
-    GdipCloneCustomLineCap(pen->customend, &(*clonepen)->customend);
-    GdipCloneBrush(pen->brush, &(*clonepen)->brush);
+    (*clonepen)->customstart = NULL;
+    (*clonepen)->customend = NULL;
+    (*clonepen)->brush = NULL;
+
+    stat = GdipCloneBrush(pen->brush, &(*clonepen)->brush);
+
+    if (stat == Ok && pen->customstart)
+        stat = GdipCloneCustomLineCap(pen->customstart, &(*clonepen)->customstart);
+
+    if (stat == Ok && pen->customend)
+        stat = GdipCloneCustomLineCap(pen->customend, &(*clonepen)->customend);
+
+    if (stat != Ok)
+    {
+        GdipDeletePen(*clonepen);
+        *clonepen = NULL;
+        return stat;
+    }
 
     TRACE("<-- %p\n", *clonepen);
 
-- 
1.8.1.2


More information about the wine-patches mailing list