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
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
