eldbus: Correctly read/write boolean to eina_value 15/134415/1
authorJosé Roberto de Souza <jose.souza@intel.com>
Wed, 27 Jan 2016 20:32:49 +0000 (18:32 -0200)
committerShinwoo Kim <cinoo.kim@samsung.com>
Fri, 16 Jun 2017 09:08:04 +0000 (18:08 +0900)
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

Change-Id: Ib1dc0613613165d841342c3f0727080955e2f436

src/lib/eldbus/eldbus_message_from_eina_value.c
src/lib/eldbus/eldbus_message_to_eina_value.c

index 05bb9f5..fc48307 100644 (file)
@@ -116,7 +116,6 @@ _array_append(const char *type, const Eina_Value *value_array, Eldbus_Message_It
              }
            break;
         }
-      case 'b'://boolean
       case 'y'://byte
         {
            unsigned char z;
@@ -128,6 +127,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;
@@ -228,7 +238,6 @@ _basic_append(char type, const Eina_Value *value, const Eina_Value_Struct_Desc *
            eldbus_message_iter_basic_append(iter, type, txt);
            break;
         }
-      case 'b'://boolean
       case 'y'://byte
         {
            unsigned char byte;
@@ -236,6 +245,13 @@ _basic_append(char type, const Eina_Value *value, const Eina_Value_Struct_Desc *
            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;
index bac9860..f8fd7dd 100644 (file)
@@ -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;