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;

-- 


Reply via email to