From b25706727b28f8c7489baae36e3e77eafedf02d8 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 13 Mar 2014 11:18:14 -0400 Subject: [PATCH] bugfix: don't iterate with or access freed pointer in comp match dialog CID 1039740 --- src/bin/e_int_config_comp_match.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/bin/e_int_config_comp_match.c b/src/bin/e_int_config_comp_match.c index af66c3e9f..3055e9f15 100644 --- a/src/bin/e_int_config_comp_match.c +++ b/src/bin/e_int_config_comp_match.c @@ -198,15 +198,16 @@ _match_list_down(Eina_List **list, Match_Config *m) else *list = eina_list_append(*list, m); } -static void +static Eina_Bool _match_list_del(Eina_List **list, Match_Config *m) { Eina_List *l; l = eina_list_data_find_list(*list, m); - if (!l) return; + if (!l) return EINA_FALSE; *list = eina_list_remove_list(*list, l); _match_free(m); + return EINA_TRUE; } @@ -638,11 +639,11 @@ _but_del(void *d1, void *d2) e_widget_ilist_remove_num(il, n); e_widget_ilist_thaw(il); e_widget_ilist_go(il); - _match_list_del(&(cfd->cfdata->popups), m); - _match_list_del(&(cfd->cfdata->borders), m); - _match_list_del(&(cfd->cfdata->overrides), m); - _match_list_del(&(cfd->cfdata->menus), m); - _match_list_del(&(cfd->cfdata->objects), m); + if (!_match_list_del(&(cfd->cfdata->popups), m)) + if (!_match_list_del(&(cfd->cfdata->borders), m)) + if (!_match_list_del(&(cfd->cfdata->overrides), m)) + if (!_match_list_del(&(cfd->cfdata->menus), m)) + _match_list_del(&(cfd->cfdata->objects), m); cfd->cfdata->changed = 1; e_config_dialog_changed_set(cfd, 1); }