Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libgdiplus for openSUSE:Factory 
checked in at 2021-01-18 11:26:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libgdiplus (Old)
 and      /work/SRC/openSUSE:Factory/.libgdiplus.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libgdiplus"

Mon Jan 18 11:26:03 2021 rev:4 rq:862693 version:6.0.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/libgdiplus/libgdiplus.changes    2020-08-23 
09:19:12.662619682 +0200
+++ /work/SRC/openSUSE:Factory/.libgdiplus.new.28504/libgdiplus.changes 
2021-01-18 11:26:04.748379546 +0100
@@ -1,0 +2,6 @@
+Tue Jan 12 18:42:24 UTC 2021 - Matthias Mail??nder <mailaen...@opensuse.org>
+
+- Update to version 6.0.5
+- Disable the static library
+
+-------------------------------------------------------------------

Old:
----
  libgdiplus-6.0.4.tar.gz

New:
----
  libgdiplus-6.0.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libgdiplus.spec ++++++
--- /var/tmp/diff_new_pack.T1rgIl/_old  2021-01-18 11:26:06.120382720 +0100
+++ /var/tmp/diff_new_pack.T1rgIl/_new  2021-01-18 11:26:06.120382720 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package libgdiplus
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %define soname 0
 Name:           libgdiplus
-Version:        6.0.4
+Version:        6.0.5
 Release:        0
 Summary:        Open Source Implementation of the GDI+ API
 License:        (LGPL-2.1-or-later OR MPL-1.1) AND MIT
@@ -66,12 +66,12 @@
 
 %build
 autoreconf -fiv
-%configure
+%configure --disable-static
 %make_build
 
 %install
 %make_install
-rm -rf %{buildroot}%{_libdir}/%{name}.{a,la}
+rm %{buildroot}%{_libdir}/%{name}.la
 
 #%check
 #%make_build check

++++++ libgdiplus-6.0.4.tar.gz -> libgdiplus-6.0.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libgdiplus-6.0.4/configure 
new/libgdiplus-6.0.5/configure
--- old/libgdiplus-6.0.4/configure      2019-10-03 15:05:49.000000000 +0200
+++ new/libgdiplus-6.0.5/configure      2020-04-17 15:18:44.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for libgdiplus 6.0.4.
+# Generated by GNU Autoconf 2.69 for libgdiplus 6.0.5.
 #
 # Report bugs to <https://github.com/mono/mono/issues/new>.
 #
@@ -590,8 +590,8 @@
 # Identity of this package.
 PACKAGE_NAME='libgdiplus'
 PACKAGE_TARNAME='libgdiplus'
-PACKAGE_VERSION='6.0.4'
-PACKAGE_STRING='libgdiplus 6.0.4'
+PACKAGE_VERSION='6.0.5'
+PACKAGE_STRING='libgdiplus 6.0.5'
 PACKAGE_BUGREPORT='https://github.com/mono/mono/issues/new'
 PACKAGE_URL=''
 
@@ -1384,7 +1384,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libgdiplus 6.0.4 to adapt to many kinds of systems.
+\`configure' configures libgdiplus 6.0.5 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1456,7 +1456,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libgdiplus 6.0.4:";;
+     short | recursive ) echo "Configuration of libgdiplus 6.0.5:";;
    esac
   cat <<\_ACEOF
 
@@ -1607,7 +1607,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libgdiplus configure 6.0.4
+libgdiplus configure 6.0.5
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1976,7 +1976,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libgdiplus $as_me 6.0.4, which was
+It was created by libgdiplus $as_me 6.0.5, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2955,7 +2955,7 @@
 
 # Define the identity of the package.
  PACKAGE='libgdiplus'
- VERSION='6.0.4'
+ VERSION='6.0.5'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -15036,7 +15036,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libgdiplus $as_me 6.0.4, which was
+This file was extended by libgdiplus $as_me 6.0.5, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -15102,7 +15102,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-libgdiplus config.status 6.0.4
+libgdiplus config.status 6.0.5
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libgdiplus-6.0.4/configure.ac 
new/libgdiplus-6.0.5/configure.ac
--- old/libgdiplus-6.0.4/configure.ac   2019-10-03 15:05:42.000000000 +0200
+++ new/libgdiplus-6.0.5/configure.ac   2020-04-17 15:18:37.000000000 +0200
@@ -1,4 +1,4 @@
-AC_INIT(libgdiplus, [6.0.4],
+AC_INIT(libgdiplus, [6.0.5],
        [https://github.com/mono/mono/issues/new])
 
 AC_CONFIG_SRCDIR([README.md])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libgdiplus-6.0.4/src/bitmap.c 
new/libgdiplus-6.0.5/src/bitmap.c
--- old/libgdiplus-6.0.4/src/bitmap.c   2019-10-03 15:05:42.000000000 +0200
+++ new/libgdiplus-6.0.5/src/bitmap.c   2020-04-17 15:18:37.000000000 +0200
@@ -590,6 +590,7 @@
        }
 
        /* Invalidate the cached surface */
+       gdip_bitmap_flush_surface (bitmap);
        gdip_bitmap_invalidate_surface (bitmap);
 
        if ((bitmap->num_of_frames == 0) || (bitmap->frames == NULL)) {
@@ -726,6 +727,8 @@
        if (!bitmap)
                return Ok;
 
+       gdip_bitmap_invalidate_surface (bitmap);
+
        if (bitmap->frames) {
                int frame;
                for (frame = 0; frame < bitmap->num_of_frames; frame++) {
@@ -735,11 +738,6 @@
                bitmap->frames = NULL;
        }
 
-       if (bitmap->surface) {
-               cairo_surface_destroy (bitmap->surface);
-               bitmap->surface = NULL;
-       }
-
        GdipFree (bitmap);
        return Ok;
 }
@@ -777,6 +775,7 @@
                GdipDisposeImage (image);
                return status;
        default:
+               GdipDisposeImage (image);
                return GenericError;
        }
 }
@@ -2250,7 +2249,6 @@
 {
        if (bitmap->surface != NULL) {
                BYTE *surface_scan0 = cairo_image_surface_get_data 
(bitmap->surface);
-               gdip_bitmap_flush_surface (bitmap);
                cairo_surface_destroy (bitmap->surface);
                bitmap->surface = NULL;
                if (surface_scan0 != bitmap->active_bitmap->scan0) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libgdiplus-6.0.4/src/gifcodec.c 
new/libgdiplus-6.0.5/src/gifcodec.c
--- old/libgdiplus-6.0.4/src/gifcodec.c 2019-09-25 16:27:41.000000000 +0200
+++ new/libgdiplus-6.0.5/src/gifcodec.c 2020-04-17 15:18:26.000000000 +0200
@@ -495,6 +495,8 @@
        ep->Bytes = (char *)GdipAlloc(ep->ByteCount);
 #endif
        if (ep->Bytes == NULL) {
+               GdipFree (New->ExtensionBlocks);
+               New->ExtensionBlocks = NULL;
                return (GIF_ERROR);
        }
 
@@ -546,29 +548,29 @@
 
        do {
                if (DGifGetRecordType(GifFile, &RecordType) == GIF_ERROR) {
-                       return (GIF_ERROR);
+                       goto error;
                }
 
                switch (RecordType) {
                        case IMAGE_DESC_RECORD_TYPE: {
                                if (DGifGetImageDesc(GifFile) == GIF_ERROR) {
-                                       return (GIF_ERROR);
+                                       goto error;
                                }
 
                                sp = &GifFile->SavedImages[GifFile->ImageCount 
- 1];
                                /* Allocate memory for the image */
                                if (sp->ImageDesc.Width < 0 && 
sp->ImageDesc.Height < 0 && sp->ImageDesc.Width > (INT_MAX / 
sp->ImageDesc.Height)) {
-                                       return GIF_ERROR;
+                                       goto error;
                                }
 
                                ImageSize = sp->ImageDesc.Width * 
sp->ImageDesc.Height;
                                if (ImageSize == 0 || ImageSize > (SIZE_MAX / 
sizeof(GifPixelType))) {
-                                       return GIF_ERROR;
+                                       goto error;
                                }
 
                                sp->RasterBits = (BYTE *) GdipAlloc (ImageSize 
* sizeof(GifPixelType));
                                if (sp->RasterBits == NULL) {
-                                       return GIF_ERROR;
+                                       goto error;
                                }
 
                                if (sp->ImageDesc.Interlace) {
@@ -583,12 +585,12 @@
                                        for (i = 0; i < 4; i++) {
                                                for (j = InterlacedOffset[i]; j 
< sp->ImageDesc.Height; j += InterlacedJumps[i]) {
                                                        if 
(DGifGetLine(GifFile, sp->RasterBits + j * sp->ImageDesc.Width, 
sp->ImageDesc.Width) == GIF_ERROR)
-                                                               return 
GIF_ERROR;
+                                                               goto error;
                                                }
                                        }
                                }
                                else if (DGifGetLine(GifFile, sp->RasterBits, 
ImageSize) == GIF_ERROR) {
-                                       return (GIF_ERROR);
+                                       goto error;
                                }
 
                                if (temp_save.ExtensionBlocks) {
@@ -609,16 +611,16 @@
                                while (ExtData != NULL) {
                                        /* Create an extension block with our 
data */
                                        if (AddExtensionBlockMono(&temp_save, 
Function, ExtData[0], &ExtData[1]) == GIF_ERROR) {
-                                               return (GIF_ERROR);
+                                               goto error;
                                        }
 
                                        if (DGifGetExtensionNext(GifFile, 
&ExtData) == GIF_ERROR) {
-                                               return (GIF_ERROR);
+                                               goto error;
                                        }
 
                                        /* Graphics control blocks cannot 
contain any sub blocks. */
                                        if (Function == 0xF9 && ExtData) {
-                                               return GIF_ERROR;
+                                               goto error;
                                        }
                                }
                                break;
@@ -636,16 +638,21 @@
 
        /* The gif file must contain at least one image block. */
        if (GifFile->ImageCount == 0)
-               return GIF_ERROR;
+               goto error;
 
        /* In case the Gif has an extension block without an associated
        * image we return it in TrailingExtensions, if provided */
        if ((TrailingExtensions != NULL) && (temp_save.ExtensionBlocks != 
NULL)) {
                *TrailingExtensions = temp_save;
+       } else {
+               FreeExtensionMono (&temp_save);
        }
 
-
        return (GIF_OK);
+
+error:
+       FreeExtensionMono (&temp_save);
+       return GIF_ERROR;
 }
 
 static GpStatus 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libgdiplus-6.0.4/src/graphics-path.c 
new/libgdiplus-6.0.5/src/graphics-path.c
--- old/libgdiplus-6.0.4/src/graphics-path.c    2019-10-02 19:08:35.000000000 
+0200
+++ new/libgdiplus-6.0.5/src/graphics-path.c    2020-04-17 15:18:37.000000000 
+0200
@@ -943,8 +943,10 @@
        if (!tangents)
                return OutOfMemory;
 
-       if (!gdip_path_ensure_size (path, path->count + (3 * (count - 1)) + 1))
+       if (!gdip_path_ensure_size(path, path->count + (3 * (count - 1)) + 1)) {
+               GdipFree(tangents);
                return OutOfMemory;
+       }
 
        append_curve (path, points, tangents, 0, count - 1, CURVE_OPEN);
 
@@ -973,9 +975,11 @@
        if (!tangents)
                return OutOfMemory;
 
-       if (!gdip_path_ensure_size (path, path->count + (3 * numberOfSegments) 
+ 1))
+       if (!gdip_path_ensure_size (path, path->count + (3 * numberOfSegments) 
+ 1)) {
+               GdipFree(tangents);
                return OutOfMemory;
-
+       }
+       
        append_curve (path, points, tangents, offset, numberOfSegments, 
CURVE_OPEN);
 
        GdipFree (tangents);
@@ -1001,8 +1005,10 @@
        if (!tangents)
                return OutOfMemory;
 
-       if (!gdip_path_ensure_size (path, path->count + (3 * count) + 1))
+       if (!gdip_path_ensure_size (path, path->count + (3 * count) + 1)) {
+               GdipFree(tangents);
                return OutOfMemory;
+       }
 
        append_curve (path, points, tangents, 0, count - 1, CURVE_CLOSE);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libgdiplus-6.0.4/src/graphics.c 
new/libgdiplus-6.0.5/src/graphics.c
--- old/libgdiplus-6.0.4/src/graphics.c 2019-10-02 19:08:35.000000000 +0200
+++ new/libgdiplus-6.0.5/src/graphics.c 2020-04-17 15:18:37.000000000 +0200
@@ -533,7 +533,7 @@
        graphics->pixel_mode = pos_state->pixel_mode;
        graphics->text_contrast = pos_state->text_contrast;
 
-       graphics->saved_status_pos = state;
+       graphics->saved_status_pos = state - 1;
 
        /* re-adjust clipping (region and matrix) */
        gdip_cairo_set_matrix (graphics, graphics->copy_of_ctm);
@@ -2002,7 +2002,10 @@
                        return status;
        }
 
-       return GdipSetClipRegion (graphics, region, combineMode);
+       status = GdipSetClipRegion (graphics, region, combineMode);
+       GdipDeleteRegion (region);
+
+       return status;
 }
 
 GpStatus WINGDIPAPI
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libgdiplus-6.0.4/src/image.c 
new/libgdiplus-6.0.5/src/image.c
--- old/libgdiplus-6.0.4/src/image.c    2019-10-02 19:08:38.000000000 +0200
+++ new/libgdiplus-6.0.5/src/image.c    2020-04-17 15:18:37.000000000 +0200
@@ -530,8 +530,10 @@
        }
 
        /* Create a surface for this bitmap if one doesn't exist */
-       if (gdip_bitmap_ensure_surface (image) == NULL)
+       if (gdip_bitmap_ensure_surface (image) == NULL) {
+               GdipDeleteMatrix(matrix);
                return OutOfMemory;
+       }
 
        pattern = cairo_pattern_create_for_surface (image->surface);
        cairo_pattern_set_filter (pattern, gdip_get_cairo_filter 
(graphics->interpolation));
@@ -699,8 +701,10 @@
                        /* We're ok just cloning the bitmap, we don't need the 
image data
                         * and we destroy it before we leave this function */
                        status = gdip_bitmap_clone (image, &imgflipX);
-                       if (status != Ok)
+                       if (status != Ok) {
+                               gdip_bitmap_dispose(imgflipX);
                                return status;
+                       }
 
                        status = gdip_flip_x (imgflipX);
                        if (status != Ok) {
@@ -713,11 +717,15 @@
                
                if (flipYOn) {                  
                        status = gdip_bitmap_clone (image, &imgflipY);
-                       if (status != Ok)
+                       if (status != Ok) {
+                               gdip_bitmap_dispose(imgflipX);
+                               gdip_bitmap_dispose(imgflipY);
                                return status;
+                       }
 
                        status = gdip_flip_y (imgflipY);
                        if (status != Ok) {
+                               gdip_bitmap_dispose (imgflipX);
                                gdip_bitmap_dispose (imgflipY);
                                return status;
                        }
@@ -727,19 +735,27 @@
                
                if (flipXOn && flipYOn) {                       
                        status = gdip_bitmap_clone (image, &imgflipXY);
-                       if (status != Ok)
+                       if (status != Ok) {
+                               gdip_bitmap_dispose(imgflipX);
+                               gdip_bitmap_dispose(imgflipY);
+                               gdip_bitmap_dispose(imgflipXY);
                                return status;
+                       }
 
                        status = gdip_flip_x (imgflipXY);
                        if (status != Ok) {
-                               gdip_bitmap_dispose (imgflipXY);
+                               gdip_bitmap_dispose(imgflipX);
+                               gdip_bitmap_dispose(imgflipY);
+                               gdip_bitmap_dispose(imgflipXY);
                                return status;
                        }
 
                        status = gdip_flip_y (imgflipXY);
                        if (status != Ok) {
-                               gdip_bitmap_dispose (imgflipXY);
-                               return Ok;
+                               gdip_bitmap_dispose(imgflipX);
+                               gdip_bitmap_dispose(imgflipY);
+                               gdip_bitmap_dispose(imgflipXY);
+                               return status;
                        }
 
                        gdip_bitmap_ensure_surface (imgflipXY);                 
@@ -843,10 +859,11 @@
        }
 
        if (allocated) {
+               gdip_bitmap_invalidate_surface (image);
                image->active_bitmap->scan0 = org;
                image->active_bitmap->pixel_format = org_format;
                image->surface = org_surface;
-               GdipFree (dest);
+               // NOTE: dest is freed by gdip_bitmap_invalidate_surface above
        }
        
        return Ok;
@@ -940,8 +957,10 @@
        if (!pointsF)
                return OutOfMemory;
 
-       return GdipDrawImagePointsRect (graphics, image, pointsF, count, srcx, 
srcy, srcwidth, srcheight, 
+       GpStatus status = GdipDrawImagePointsRect(graphics, image, pointsF, 
count, srcx, srcy, srcwidth, srcheight,
                srcUnit, imageAttributes, callback, callbackData);
+       GdipFree(pointsF);
+       return status;
 }
 
 /*
@@ -1073,8 +1092,10 @@
        encoders = GdipAlloc (size);
 
        status = GdipGetImageEncoders (numEncoders, size, encoders);
-       if (status != Ok)
+       if (status != Ok) {
+               GdipFree(encoders);
                return INVALID;
+       }
 
        for (cnt = 0, encoder = encoders; cnt < numEncoders; cnt++, encoder++) {
                if (memcmp (&encoder->Clsid, encoderCLSID, sizeof (GUID)) == 0) 
{
@@ -1596,6 +1617,7 @@
        image->active_bitmap->scan0 = rotated;
        image->active_bitmap->reserved |= GBD_OWN_SCAN0;        
 
+       gdip_bitmap_flush_surface (image);
        gdip_bitmap_invalidate_surface (image);
 
        return Ok;
@@ -1774,6 +1796,7 @@
 
        /* It shouldn't be possible for an indexed image to have one,
         * but if it does, it needs to be killed. */
+       gdip_bitmap_flush_surface (image);
        gdip_bitmap_invalidate_surface (image);
 
        return Ok;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libgdiplus-6.0.4/src/metafile.c 
new/libgdiplus-6.0.5/src/metafile.c
--- old/libgdiplus-6.0.4/src/metafile.c 2019-09-25 16:27:41.000000000 +0200
+++ new/libgdiplus-6.0.5/src/metafile.c 2020-04-17 15:18:26.000000000 +0200
@@ -945,6 +945,8 @@
        }
 
        mf->base = *base;
+       GdipFree(base);
+       base = NULL;
 
        memcpy (&mf->metafile_header, &metafile->metafile_header, sizeof 
(MetafileHeader));
        if (metafile->length > 0) {
@@ -1719,7 +1721,8 @@
                if (wmfPlaceableFileHeader) {
                        status = GdipGetMetafileHeaderFromWmf (hWmf, 
wmfPlaceableFileHeader, &(*metafile)->metafile_header);
                        if (status != Ok) {
-                               GdipFree (*metafile);
+                               gdip_metafile_dispose (*metafile);
+                               *metafile = NULL;
                                return status;
                        }
                }
@@ -1730,7 +1733,7 @@
        case MetafileTypeEmfPlusOnly:
        case MetafileTypeEmfPlusDual:
        default:
-               GdipFree (*metafile);
+               gdip_metafile_dispose (*metafile);
                *metafile = NULL;
                return GenericError;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libgdiplus-6.0.4/src/pngcodec.c 
new/libgdiplus-6.0.5/src/pngcodec.c
--- old/libgdiplus-6.0.4/src/pngcodec.c 2019-10-02 19:08:38.000000000 +0200
+++ new/libgdiplus-6.0.5/src/pngcodec.c 2020-04-17 15:18:37.000000000 +0200
@@ -412,6 +412,7 @@
                result = gdip_bitmap_new_with_frame 
(&gdip_image_frameDimension_page_guid, TRUE);
                if (!result) {
                        status = OutOfMemory;
+                       GdipFree(palette);
                        goto error;
                }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libgdiplus-6.0.4/src/region.c 
new/libgdiplus-6.0.5/src/region.c
--- old/libgdiplus-6.0.4/src/region.c   2019-10-02 19:08:35.000000000 +0200
+++ new/libgdiplus-6.0.5/src/region.c   2020-04-17 15:18:37.000000000 +0200
@@ -865,7 +865,9 @@
                        if (alltrgrects) {
                                GdipFree (alltrgrects);
                        }
-
+                       if (allsrcrects) {
+                               GdipFree(allsrcrects);
+                       }
                        return status;
                }
        }
@@ -2105,7 +2107,7 @@
 GdipGetRegionScansI (GpRegion *region, GpRect *rects, INT *count, GpMatrix 
*matrix)
 {
        GpStatus status;
-       GpRectF *rectsF;
+       GpRectF *rectsF = NULL;
        UINT scansCount;
 
        if (!region || !count || !matrix)
@@ -2124,14 +2126,20 @@
        }
 
        status = GdipGetRegionScans (region, rectsF, count, matrix);
-       if (status != Ok)
+       if (status != Ok) {
+               if (rectsF)
+                       free(rectsF);
                return status;
+       }
                
        if (rects) {
                for (int i = 0; i < scansCount; i++)
                        gdip_Rect_from_RectF (&rectsF[i], &rects[i]);
        }
 
+       if (rectsF)
+               free(rectsF);
+       
        return Ok;
 }
 

Reply via email to