summaryrefslogtreecommitdiff
path: root/ivi-shell/ivi-layout-transition.c
diff options
context:
space:
mode:
authorLucas Tanure <tanure@linux.com>2015-09-23 10:33:21 -0300
committerBryce Harrington <bryce@osg.samsung.com>2015-09-23 17:02:28 -0700
commitc8dcd16b01ea0f5ac8f32ee18374b2ca2694dd6c (patch)
treef0d00b5f7b1fd2e68844072ccb386a915aca3aad /ivi-shell/ivi-layout-transition.c
parentae5df83f8e029e427f5d587622b3d25b3d1b4964 (diff)
downloadweston-c8dcd16b01ea0f5ac8f32ee18374b2ca2694dd6c.tar.gz
ivi-layout-transition: Fix potential leak of memory pointed to by transition
Several fixes to handle invalid transition objects: 1. Free transition in ivi_layout_transition_fade_layer if we fail to allocate memory for data 2. Check if transition is not null and if layout_transition_register was ok before return, if not, free transition 3. Destroy transition if layout_transition_register was not ok, we can't just free transition, we need to call layout_transition_destroy in order to free private_data from transition Signed-off-by: Lucas Tanure <tanure@linux.com> Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
Diffstat (limited to 'ivi-shell/ivi-layout-transition.c')
-rw-r--r--ivi-shell/ivi-layout-transition.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/ivi-shell/ivi-layout-transition.c b/ivi-shell/ivi-layout-transition.c
index 150e3017..adaa543c 100644
--- a/ivi-shell/ivi-layout-transition.c
+++ b/ivi-shell/ivi-layout-transition.c
@@ -512,7 +512,7 @@ create_visibility_transition(struct ivi_layout_surface *surface,
destroy_func,
duration);
- if(!layout_transition_register(transition))
+ if (!layout_transition_register(transition))
layout_transition_destroy(transition);
}
@@ -746,9 +746,10 @@ ivi_layout_transition_move_layer(struct ivi_layout_layer *layer,
NULL, NULL,
duration);
- layout_transition_register(transition);
+ if (transition && layout_transition_register(transition))
+ return;
- return;
+ free(transition);
}
void
@@ -850,6 +851,7 @@ ivi_layout_transition_fade_layer(
data = malloc(sizeof(*data));
if (data == NULL) {
weston_log("%s: memory allocation fails\n", __func__);
+ free(transition);
return;
}
@@ -871,7 +873,8 @@ ivi_layout_transition_fade_layer(
data->end_alpha = end_alpha;
data->destroy_func = destroy_func;
- layout_transition_register(transition);
+ if (!layout_transition_register(transition))
+ layout_transition_destroy(transition);
return;
}