From 931d02378b3152b530d84bff09fd842cf0998f53 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Thu, 5 Dec 2013 17:41:48 +0900 Subject: [PATCH] efreet - fix recusrion checks need to pop as well as push. stable release - cherry-pick me! this fixes a lack of popping the efret recursion stack handler. this wasn't done in 1.8 and is a bug. --- src/bin/efreet/efreet_desktop_cache_create.c | 8 +++++++- src/bin/efreet/efreetd_cache.c | 8 ++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/bin/efreet/efreet_desktop_cache_create.c b/src/bin/efreet/efreet_desktop_cache_create.c index 9ddf26dbb6..d67084d467 100644 --- a/src/bin/efreet/efreet_desktop_cache_create.c +++ b/src/bin/efreet/efreet_desktop_cache_create.c @@ -153,7 +153,11 @@ cache_scan(Eina_Inarray *stack, const char *path, const char *base_id, eina_inarray_push(stack, &st); it = eina_file_stat_ls(path); - if (!it) return 1; + if (!it) + { + eina_inarray_pop(stack); + return 1; + } id[0] = '\0'; EINA_ITERATOR_FOREACH(it, info) { @@ -182,11 +186,13 @@ cache_scan(Eina_Inarray *stack, const char *path, const char *base_id, if (!cache_add(info->path, file_id, priority, changed)) { eina_iterator_free(it); + eina_inarray_pop(stack); return 0; } } } eina_iterator_free(it); + eina_inarray_pop(stack); return 1; } diff --git a/src/bin/efreet/efreetd_cache.c b/src/bin/efreet/efreetd_cache.c index 5b454875b3..0d588970c7 100644 --- a/src/bin/efreet/efreetd_cache.c +++ b/src/bin/efreet/efreetd_cache.c @@ -284,7 +284,7 @@ icon_changes_listen_recursive(Eina_Inarray *stack, const char *path, Eina_Bool b } if (ecore_file_is_dir(path)) icon_changes_monitor_add(path); it = eina_file_stat_ls(path); - if (!it) return; + if (!it) goto end; EINA_ITERATOR_FOREACH(it, info) { if (info->path[info->name_start] == '.') continue; @@ -293,6 +293,8 @@ icon_changes_listen_recursive(Eina_Inarray *stack, const char *path, Eina_Bool b icon_changes_listen_recursive(stack, info->path, EINA_FALSE); } eina_iterator_free(it); +end: + eina_inarray_pop(stack); } static void @@ -319,7 +321,7 @@ desktop_changes_listen_recursive(Eina_Inarray *stack, const char *path, Eina_Boo } if (ecore_file_is_dir(path)) desktop_changes_monitor_add(path); it = eina_file_stat_ls(path); - if (!it) return; + if (!it) goto end; EINA_ITERATOR_FOREACH(it, info) { if (info->path[info->name_start] == '.') continue; @@ -328,6 +330,8 @@ desktop_changes_listen_recursive(Eina_Inarray *stack, const char *path, Eina_Boo desktop_changes_listen_recursive(stack, info->path, EINA_FALSE); } eina_iterator_free(it); +end: + eina_inarray_pop(stack); } static void