summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHermet Park <chuneon.park@samsung.com>2020-06-08 11:00:26 +0900
committerHermet Park <chuneon.park@samsung.com>2020-06-08 11:00:27 +0900
commit8559602bccb2a722822f0b42ca122db8827e1644 (patch)
tree7a4f870af83e0397b63d7d604285d58050a5b616
parent9afc497269cc5760fa7de01c6c712df6070bdf28 (diff)
downloadefl-8559602bccb2a722822f0b42ca122db8827e1644.tar.gz
eldbus: fix the data size issue.
Summary: dbus message requires the void* value for the message data, the returned value of dbus_message_iter_get_basic() can be mismatched by to the architure, This could bring the returned va_argues memory corrupted among the series of values. We can use the defined type for exceptions. Reviewers: herb, kimcinoo, jsuya, raster Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D11940
-rw-r--r--src/lib/eldbus/eldbus_message.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/src/lib/eldbus/eldbus_message.c b/src/lib/eldbus/eldbus_message.c
index e7295077ab..f8605dd9d1 100644
--- a/src/lib/eldbus/eldbus_message.c
+++ b/src/lib/eldbus/eldbus_message.c
@@ -619,32 +619,36 @@ eldbus_message_iter_next(Eldbus_Message_Iter *iter)
static void
get_basic(char type, DBusMessageIter *iter, va_list *vl)
{
+ DBusBasicValue val;
+
switch (type)
{
case DBUS_TYPE_BYTE:
{
uint8_t *byte = va_arg(*vl, uint8_t *);
- dbus_message_iter_get_basic(iter, byte);
+ dbus_message_iter_get_basic(iter, &val);
+ *byte = val.bool_val;
break;
}
case DBUS_TYPE_BOOLEAN:
{
Eina_Bool *boolean = va_arg(*vl, Eina_Bool *);
- dbus_bool_t val;
dbus_message_iter_get_basic(iter, &val);
- *boolean = val;
+ *boolean = val.bool_val;
break;
}
case DBUS_TYPE_INT16:
{
int16_t *int16 = va_arg(*vl, int16_t *);
- dbus_message_iter_get_basic(iter, int16);
+ dbus_message_iter_get_basic(iter, &val);
+ *int16 = val.i16;
break;
}
case DBUS_TYPE_UINT16:
{
uint16_t *uint16 = va_arg(*vl, uint16_t *);
- dbus_message_iter_get_basic(iter, uint16);
+ dbus_message_iter_get_basic(iter, &val);
+ *uint16 = val.u16;
break;
}
case DBUS_TYPE_INT32:
@@ -653,31 +657,36 @@ get_basic(char type, DBusMessageIter *iter, va_list *vl)
#endif
{
int32_t *int32 = va_arg(*vl, int32_t *);
- dbus_message_iter_get_basic(iter, int32);
+ dbus_message_iter_get_basic(iter, &val);
+ *int32 = val.i32;
break;
}
case DBUS_TYPE_UINT32:
{
uint32_t *uint32 = va_arg(*vl, uint32_t *);
- dbus_message_iter_get_basic(iter, uint32);
+ dbus_message_iter_get_basic(iter, &val);
+ *uint32 = val.u32;
break;
}
case DBUS_TYPE_INT64:
{
int64_t *int64 = va_arg(*vl, int64_t *);
- dbus_message_iter_get_basic(iter, int64);
+ dbus_message_iter_get_basic(iter, &val);
+ *int64 = val.i64;
break;
}
case DBUS_TYPE_UINT64:
{
uint64_t *uint64 = va_arg(*vl, uint64_t *);
- dbus_message_iter_get_basic(iter, uint64);
+ dbus_message_iter_get_basic(iter, &val);
+ *uint64 = val.u64;
break;
}
case DBUS_TYPE_DOUBLE:
{
double *double_ieee = va_arg(*vl, double *);
- dbus_message_iter_get_basic(iter, double_ieee);
+ dbus_message_iter_get_basic(iter, &val);
+ *double_ieee = val.dbl;
break;
}
case DBUS_TYPE_STRING:
@@ -685,7 +694,8 @@ get_basic(char type, DBusMessageIter *iter, va_list *vl)
case DBUS_TYPE_SIGNATURE:
{
char **string = va_arg(*vl, char**);
- dbus_message_iter_get_basic(iter, string);
+ dbus_message_iter_get_basic(iter, &val);
+ *string = val.str;
break;
}
default: