From e53c47bcf08fed5d66bdf350b680551902acb546 Mon Sep 17 00:00:00 2001 From: Lucas De Marchi Date: Mon, 17 Dec 2012 18:24:31 +0000 Subject: [PATCH] edbus: Let arguments_get fail if getting less args than passed If user passed a string with more elements, return EINA_FALSE on edbus_message_arguments_get() so he knows not all elements are initialized. Before this patch, we would notify user of its error if he did something like: i) edbus_message_arguments_get(msg, "uu", &a) ii) edbus_message_arguments_get(msg, "uu", &a, &b) And "msg" containing only 1 argument. This also fixes the case in which user is getting the elements of an array iterator and the array is empty. We were previously returning EINA_TRUE, even if we were not filling the variable. Last but not least, if the user was calling edbus_message_iter_arguments_get() in an empty array, we would return EINA_FALSE, even if we didn't actually get any element. SVN revision: 81170 --- legacy/edbus/src/lib/edbus_message.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/legacy/edbus/src/lib/edbus_message.c b/legacy/edbus/src/lib/edbus_message.c index c44cc9d839..eeab1db1bc 100644 --- a/legacy/edbus/src/lib/edbus_message.c +++ b/legacy/edbus/src/lib/edbus_message.c @@ -721,6 +721,7 @@ edbus_message_iter_arguments_vget(EDBus_Message_Iter *iter, const char *signatur dbus_signature_iter_init(&sig_iter, signature); iter_type = dbus_message_iter_get_arg_type(&iter->dbus_iterator); + while (iter_type != DBUS_TYPE_INVALID) { int sig_type = dbus_signature_iter_get_current_type(&sig_iter); @@ -751,7 +752,8 @@ edbus_message_iter_arguments_vget(EDBus_Message_Iter *iter, const char *signatur dbus_signature_iter_next(&sig_iter); iter_type = dbus_message_iter_get_arg_type(&iter->dbus_iterator); } - return EINA_TRUE; + + return dbus_signature_iter_get_current_type(&sig_iter) == DBUS_TYPE_INVALID; } EAPI void