Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- From c572f99bba131b98b2747b296a87c4489e0141fd Mon Sep 17 00:00:00 2001
- From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= <jose.souza@intel.com>
- Date: Wed, 27 Jan 2016 18:32:49 -0200
- Subject: [PATCH] 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;
- --
- 2.7.0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement