Hi,
Check this patch, if is ok?

--- a\src\iup_image.c   Mon Jan 29 09:17:08 2018
+++ b\src\iup_image.c   Mon Jan 29 09:58:56 2018
@@ -613,11 +613,11 @@
 
 void* iupImageGetImage(const char* name, Ihandle* ih_parent, int make_inactive)
 {
-  char cache_name[100] = "_IUPIMAGE_IMAGE";
+  char cache_name[128] = "_IUPIMAGE_IMAGE";
+  const char* native_name = NULL;
   char* bgcolor;
   void* handle;
   Ihandle *ih;
-  int bg_concat = 0;
 
   if (!name)
     return NULL;
@@ -625,65 +625,46 @@
   ih = iImageGetImageFromName(name);
   if (!ih)
   {
-    const char* native_name = NULL;
-
-    /* Check in the system resources. */
-    handle = iupdrvImageLoad(name, IUPIMAGE_IMAGE);
-    if (handle) 
-      return handle;
-
     /* Check in the stock images. */
     iImageStockGet(name, &ih, &native_name);
-    if (native_name) 
-    {
-      handle = iupdrvImageLoad(native_name, IUPIMAGE_IMAGE);
-      if (handle) 
-        return handle;
-    }
-
     if (!ih)
       return NULL;
   }
-
   handle = iupAttribGet(ih, "_IUPSTOCK_LOAD_HANDLE");
   if (handle)
+  {
     return handle;
-
-  bgcolor = iupAttribGet(ih, "BGCOLOR");
-  if (ih_parent && !bgcolor)
-    bgcolor = IupGetAttribute(ih_parent, "BGCOLOR"); /* Use IupGetAttribute to 
use inheritance and native implementation */
+  }
 
   if (make_inactive)
     strcat(cache_name, "_INACTIVE");
 
+  bgcolor = iupAttribGet(ih, "BGCOLOR");
+  if (ih_parent && !bgcolor)
+    bgcolor = IupGetAttribute(ih_parent, "BGCOLOR"); /* Use IupGetAttribute to 
use inheritance and native implementation */
   if (iupAttribGet(ih, "_IUP_BGCOLOR_DEPEND") && bgcolor)
   {
     strcat(cache_name, "(");
     strcat(cache_name, bgcolor);
     strcat(cache_name, ")");
-    bg_concat = 1;
   }
-  
+
   /* Check for an already created native image */
   handle = (void*)iupAttribGet(ih, cache_name);
   if (handle)
     return handle;
 
-  if (ih_parent && iupAttribGetStr(ih_parent, "FLAT_ALPHA"))
-    iupAttribSet(ih, "FLAT_ALPHA", "1");
-
-  /* Creates the native image */
-  handle = iupdrvImageCreateImage(ih, bgcolor, make_inactive);
-
-  if (ih_parent && iupAttribGetStr(ih_parent, "FLAT_ALPHA"))
-    iupAttribSet(ih, "FLAT_ALPHA", NULL);
-
-  if (iupAttribGet(ih, "_IUP_BGCOLOR_DEPEND") && bgcolor && !bg_concat)  /* 
_IUP_BGCOLOR_DEPEND could be set during creation */
+  /* Check in the system resources. */
+  handle = iupdrvImageLoad(name, IUPIMAGE_IMAGE);
+  if (!handle && native_name)
   {
-    strcat(cache_name, "(");
-    strcat(cache_name, bgcolor);
-    strcat(cache_name, ")");
+     handle = iupdrvImageLoad(native_name, IUPIMAGE_IMAGE);
+     if (!handle)
+        return NULL;    
   }
+
+  if (ih_parent && iupAttribGetStr(ih_parent, "FLAT_ALPHA"))
+    iupAttribSet(ih_image, "FLAT_ALPHA", NULL);
 
   /* save the native image in the cache */
   iupAttribSet(ih, cache_name, (char*)handle);

Best,
Ranier Vilela
________________________________________
De: Ranier VF <[email protected]>
Enviado: segunda-feira, 29 de janeiro de 2018 11:11
Para: IUP discussion list.
Assunto: Re: [Iup-users] IUP 3.24 RESOURCE_LEAK (iupwin_menu.c)

Hi,
Really the patch submitted is not correct, but, the problem persists.
iupwin_menu leaks the image handler.

in (iup_image.c), function: iupImageGetImage

if function iImageGetImageFromName fail, is executed this:

    handle = iupdrvImageLoad(name, IUPIMAGE_IMAGE);
    if (handle)
      return handle;

iupdrvImageLoad dot not store handle in the cache, in this way,
iupwin_menu.c still leaks.

Best regards,
Ranier Vilela

________________________________________
De: Antonio Scuri <[email protected]>
Enviado: sexta-feira, 26 de janeiro de 2018 19:44
Para: IUP discussion list.
Assunto: Re: [Iup-users] IUP 3.24 RESOURCE_LEAK (iupwin_menu.c)

  Those DeleteObject(hBitmap*) can not be called. They are stored in a cache 
inside the IupImage, they will be released later when the image is destroyed.

Best,
Scuri


2018-01-24 22:30 GMT-02:00 Ranier VF 
<[email protected]<mailto:[email protected]>>:
Hi,
Issue found by Coverity Scan.
CID 259189 (#1-2 of 2): Resource leak (RESOURCE_LEAK)

--- a\src\win\iupwin_menu.c     Mon Dec 11 14:52:42 2017
+++ b\src\win\iupwin_menu.c     Wed Jan 24 22:26:33 2018
@@ -431,9 +431,13 @@
     hBitmapChecked = hBitmapUnchecked;

   SetMenuItemBitmaps((HMENU)ih->handle, (UINT)ih->serial, MF_BYCOMMAND, 
hBitmapUnchecked, hBitmapChecked);
-
   winMenuUpdateBar(ih);

+  if (impress)
+  {
+     DeleteObject(hBitmapChecked);
+  }
+
   return 1;
 }

@@ -450,8 +454,13 @@
     hBitmapChecked = hBitmapUnchecked;

   SetMenuItemBitmaps((HMENU)ih->handle, (UINT)ih->serial, MF_BYCOMMAND, 
hBitmapUnchecked, hBitmapChecked);
-
   winMenuUpdateBar(ih);
+
+  if (value)
+  {
+    DeleteObject(hBitmapChecked);
+  }
+  DeleteObject(hBitmapunChecked);

   return 1;
 }

Best.
Ranier Vilela
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Iup-users mailing list
[email protected]<mailto:[email protected]>
https://lists.sourceforge.net/lists/listinfo/iup-users



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Iup-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/iup-users

Attachment: iup_image.patch
Description: iup_image.patch

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Iup-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/iup-users

Reply via email to