[3/4] gdiplus: fix for GpRegion clone helper
Nikolay Sivov
bunglehead at gmail.com
Tue Aug 26 17:03:23 CDT 2008
Changelog:
- Fix for region clone function not to overwrite already allocated memory and not to leak it too.
---
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);
--
1.4.4.4
More information about the wine-patches
mailing list