Nikolay Sivov : gdiplus: Fix for GpRegion clone helper.

Alexandre Julliard julliard at winehq.org
Wed Aug 27 08:24:15 CDT 2008


Module: wine
Branch: master
Commit: 740bc043cb2cb23410864517eb7128b8d5b18ef6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=740bc043cb2cb23410864517eb7128b8d5b18ef6

Author: Nikolay Sivov <bunglehead at gmail.com>
Date:   Wed Aug 27 02:03:23 2008 +0400

gdiplus: Fix for GpRegion clone helper.

---

 dlls/gdiplus/region.c |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/dlls/gdiplus/region.c b/dlls/gdiplus/region.c
index 45d0e51..b814450 100644
--- a/dlls/gdiplus/region.c
+++ b/dlls/gdiplus/region.c
@@ -167,9 +167,12 @@ static inline GpStatus clone_element(const region_element* element,
 {
     GpStatus stat;
 
-    *element2 = GdipAlloc(sizeof(region_element));
-    if (!*element2)
-        return OutOfMemory;
+    /* root node is allocated with GpRegion */
+    if(!*element2){
+        *element2 = GdipAlloc(sizeof(region_element));
+        if (!*element2)
+            return OutOfMemory;
+    }
 
     (*element2)->type = element->type;
 
@@ -188,6 +191,9 @@ static inline GpStatus clone_element(const region_element* element,
             if (stat != Ok) goto clone_out;
             break;
         default:
+            (*element2)->elementdata.combine.left  = NULL;
+            (*element2)->elementdata.combine.right = NULL;
+
             stat = clone_element(element->elementdata.combine.left,
                     &(*element2)->elementdata.combine.left);
             if (stat != Ok) goto clone_out;
@@ -344,7 +350,7 @@ GpStatus WINGDIPAPI GdipCombineRegionRectI(GpRegion *region,
 GpStatus WINGDIPAPI GdipCombineRegionRegion(GpRegion *region1,
         GpRegion *region2, CombineMode mode)
 {
-    region_element *left, *right;
+    region_element *left, *right = NULL;
     GpStatus stat;
 
     TRACE("%p %p %d\n", region1, region2, mode);




More information about the wine-cvs mailing list