Sebastian Lackner : user32: Fix invalid memory access and leak if alloc_user_handle fails (Coverity).

Alexandre Julliard julliard at wine.codeweavers.com
Tue Mar 17 11:01:59 CDT 2015


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

Author: Sebastian Lackner <sebastian at fds-team.de>
Date:   Tue Mar 17 06:14:45 2015 +0100

user32: Fix invalid memory access and leak if alloc_user_handle fails (Coverity).

---

 dlls/user32/cursoricon.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/dlls/user32/cursoricon.c b/dlls/user32/cursoricon.c
index 8504bdc..f7b6bca 100644
--- a/dlls/user32/cursoricon.c
+++ b/dlls/user32/cursoricon.c
@@ -123,12 +123,14 @@ static HICON alloc_icon_handle( BOOL is_ani, UINT num_steps )
 {
     struct cursoricon_object *obj;
     int icon_size;
+    HICON handle;
 
     if (is_ani)
         icon_size = FIELD_OFFSET( struct animated_cursoricon_object, frames[num_steps] );
     else
         icon_size = sizeof( struct static_cursoricon_object );
     obj = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, icon_size );
+    if (!obj) return NULL;
 
     obj->delay = 0;
     obj->is_ani = is_ani;
@@ -139,7 +141,10 @@ static HICON alloc_icon_handle( BOOL is_ani, UINT num_steps )
         ani_icon_data->num_steps = num_steps;
         ani_icon_data->num_frames = num_steps; /* changed later for some animated cursors */
     }
-    return alloc_user_handle( &obj->obj, USER_ICON );
+
+    if (!(handle = alloc_user_handle( &obj->obj, USER_ICON )))
+        HeapFree( GetProcessHeap(), 0, obj );
+    return handle;
 }
 
 static struct cursoricon_object *get_icon_ptr( HICON handle )




More information about the wine-cvs mailing list