From bdc6f56860268ea3ac08bab3439658e2935bd576 Mon Sep 17 00:00:00 2001 From: discomfitor Date: Wed, 9 Nov 2011 14:01:11 +0000 Subject: [PATCH] fix a null deref git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/e_dbus@64985 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/connman/e_connman_element.c | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/src/lib/connman/e_connman_element.c b/src/lib/connman/e_connman_element.c index ef56341..5955fad 100644 --- a/src/lib/connman/e_connman_element.c +++ b/src/lib/connman/e_connman_element.c @@ -178,27 +178,17 @@ e_connman_element_listener_del(E_Connman_Element *element, void (*cb)(void *data static void _e_connman_element_listeners_call_do(E_Connman_Element *element) { - E_Connman_Element_Listener *l, **shadow; - unsigned int i, count; + E_Connman_Element_Listener *l; + Eina_Inlist *x; /* NB: iterate on a copy in order to allow listeners to be deleted * from callbacks. number of listeners should be small, so the * following should do fine. */ - count = eina_inlist_count(element->_listeners); - if (count < 1) - goto end; - - shadow = alloca(sizeof(*shadow) * count); - if (!shadow) - goto end; - - i = 0; - EINA_INLIST_FOREACH(element->_listeners, l) - shadow[i++] = l; + if (eina_inlist_count(element->_listeners) < 1) goto end; - for (i = 0; i < count; i++) - shadow[i]->cb(shadow[i]->data, element); + EINA_INLIST_FOREACH_SAFE(element->_listeners, x, l) + l->cb(l->data, element); end: e_connman_element_event_add(E_CONNMAN_EVENT_ELEMENT_UPDATED, element); -- 2.7.4