Module: wine Branch: master Commit: a9ff334976e78808a36659df24d8b3e6a38f3b26 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a9ff334976e78808a36659df24...
Author: Sebastian Lackner sebastian@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 )