zehortigoza pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=316cf42159305ffcccfbfbdd53645126f944c308
commit 316cf42159305ffcccfbfbdd53645126f944c308 Author: José Roberto de Souza <jose.so...@intel.com> Date: Wed Jan 27 18:32:49 2016 -0200 eldbus: Correctly read/write boolean to eina_value DBus bool type is a uint32_t not a uint8_t, just changing how read and write, not chaging how it is stored in eina_value to save some bytes of RAM. This fix the stack overflow pointed out here: https://phab.enlightenment.org/T3089 @fix --- src/lib/eldbus/eldbus_message_from_eina_value.c | 28 ++++++++++++++++++++++--- src/lib/eldbus/eldbus_message_to_eina_value.c | 17 +++++++++++++-- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/src/lib/eldbus/eldbus_message_from_eina_value.c b/src/lib/eldbus/eldbus_message_from_eina_value.c index 3d594fb..4280a6b 100644 --- a/src/lib/eldbus/eldbus_message_from_eina_value.c +++ b/src/lib/eldbus/eldbus_message_from_eina_value.c @@ -118,7 +118,6 @@ _array_append(const char *type, const Eina_Value *value_array, Eldbus_Message_It } break; } - case 'b'://boolean case 'y'://byte { unsigned char z; @@ -130,6 +129,17 @@ _array_append(const char *type, const Eina_Value *value_array, Eldbus_Message_It } break; } + case 'b'://boolean + { + unsigned char z; + unsigned i; + for (i = 0; i < eina_value_array_count(value_array); i++) + { + eina_value_array_get(value_array, i, &z); + eldbus_message_iter_basic_append(array, type[1], (uint32_t)z); + } + break; + } case 'n'://int16 { int16_t z; @@ -230,7 +240,6 @@ _basic_append_value_struct(char type, const Eina_Value *value, const Eina_Value_ eldbus_message_iter_basic_append(iter, type, txt); break; } - case 'b'://boolean case 'y'://byte { unsigned char byte; @@ -238,6 +247,13 @@ _basic_append_value_struct(char type, const Eina_Value *value, const Eina_Value_ eldbus_message_iter_basic_append(iter, type, byte); break; } + case 'b'://boolean + { + unsigned char boolean; + eina_value_struct_get(value, desc->members[idx].name, &boolean); + eldbus_message_iter_basic_append(iter, type, (uint32_t)boolean); + break; + } case 'n'://int16 { int16_t i; @@ -395,7 +411,6 @@ _basic_append_value(char type, const Eina_Value *value, Eldbus_Message_Iter *ite eldbus_message_iter_basic_append(iter, type, txt); break; } - case 'b'://boolean case 'y'://byte { unsigned char byte; @@ -403,6 +418,13 @@ _basic_append_value(char type, const Eina_Value *value, Eldbus_Message_Iter *ite eldbus_message_iter_basic_append(iter, type, byte); break; } + case 'b'://boolean + { + unsigned char boolean; + eina_value_get(value, &boolean); + eldbus_message_iter_basic_append(iter, type, (uint32_t)boolean); + break; + } case 'n'://int16 { int16_t i; diff --git a/src/lib/eldbus/eldbus_message_to_eina_value.c b/src/lib/eldbus/eldbus_message_to_eina_value.c index 87258bf..32be7ee 100644 --- a/src/lib/eldbus/eldbus_message_to_eina_value.c +++ b/src/lib/eldbus/eldbus_message_to_eina_value.c @@ -164,7 +164,6 @@ _message_iter_basic_array_to_eina_value(char type, Eina_Value *value, Eldbus_Mes eina_value_array_append(value, txt); break; } - case 'b'://boolean case 'y'://byte { unsigned char byte; @@ -172,6 +171,13 @@ _message_iter_basic_array_to_eina_value(char type, Eina_Value *value, Eldbus_Mes eina_value_array_append(value, byte); break; } + case 'b'://boolean + { + uint32_t boolean; + while (eldbus_message_iter_get_and_next(iter, type, &boolean)) + eina_value_array_append(value, (uint8_t)boolean); + break; + } case 'n'://int16 { int16_t i; @@ -316,7 +322,6 @@ _message_iter_struct_to_eina_value(Eldbus_Message_Iter *iter) eina_value_set(v, txt); break; } - case 'b'://boolean case 'y'://byte { unsigned char byte; @@ -325,6 +330,14 @@ _message_iter_struct_to_eina_value(Eldbus_Message_Iter *iter) eina_value_set(v, byte); break; } + case 'b'://boolean + { + uint32_t value; + v = eina_value_new(EINA_VALUE_TYPE_UCHAR); + eldbus_message_iter_basic_get(iter, &value); + eina_value_set(v, (uint8_t)value); + break; + } case 'n'://int16 { int16_t i; --