From: Eduardo Lima (Etrunko) Date: Thu, 26 Sep 2013 20:32:51 +0000 (-0300) Subject: Handle cases of Eldbus_Message_Iter argument being NULL X-Git-Tag: upstream/0.0.2~27 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5e43a70ed9ad567df75a1212a602093267cd22a4;p=platform%2Fupstream%2Fweekeyboard.git Handle cases of Eldbus_Message_Iter argument being NULL Change-Id: Idf20fee9617ea1322c145d4ebf9804973046110f Signed-off-by: Eduardo Lima (Etrunko) --- diff --git a/src/wkb-ibus-config-key.c b/src/wkb-ibus-config-key.c index 9b3d255..b349b74 100644 --- a/src/wkb-ibus-config-key.c +++ b/src/wkb-ibus-config-key.c @@ -99,29 +99,30 @@ _key_bool_get(struct wkb_config_key *key, Eldbus_Message_Iter *reply) static void _key_string_free(const char **str) { - if (*str) - eina_stringshare_del(*str); + if (!*str) + return; + + eina_stringshare_del(*str); + *str = NULL; } static Eina_Bool _key_string_set(struct wkb_config_key *key, Eldbus_Message_Iter *iter) { - const char *str; + const char *str = NULL; const char **field; - if (!eldbus_message_iter_arguments_get(iter, "s", &str)) + if (iter && !eldbus_message_iter_arguments_get(iter, "s", &str)) { printf("Error decoding string value using 's'\n"); return EINA_FALSE; } - if ((field = (const char **) key->field) && *field) - eina_stringshare_del(*field); + if ((field = (const char **) key->field)) + _key_string_free(field); if (str && strlen(str)) *field = eina_stringshare_add(str); - else - *field = NULL; return EINA_TRUE; } @@ -137,10 +138,14 @@ _key_string_list_free(Eina_List **list) { const char *str; + if (!*list) + return; + EINA_LIST_FREE(*list, str) eina_stringshare_del(str); eina_list_free(*list); + *list = NULL; } static Eina_Bool @@ -150,10 +155,10 @@ _key_string_list_set(struct wkb_config_key *key, Eldbus_Message_Iter *iter) Eina_List *list = NULL; Eina_List **field; - while (eldbus_message_iter_get_and_next(iter, 's', &str)) + while (iter && eldbus_message_iter_get_and_next(iter, 's', &str)) list = eina_list_append(list,eina_stringshare_add(str)); - if ((field = (Eina_List **) key->field) && *field) + if ((field = (Eina_List **) key->field)) _key_string_list_free(field); *field = list;