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
This commit is contained in:
Hermet Park 2020-06-08 11:00:26 +09:00 committed by Stefan Schmidt
parent 9dc5255d10
commit 909dd07ba8
1 changed files with 21 additions and 11 deletions

View File

@ -619,32 +619,36 @@ eldbus_message_iter_next(Eldbus_Message_Iter *iter)
static void static void
get_basic(char type, DBusMessageIter *iter, va_list *vl) get_basic(char type, DBusMessageIter *iter, va_list *vl)
{ {
DBusBasicValue val;
switch (type) switch (type)
{ {
case DBUS_TYPE_BYTE: case DBUS_TYPE_BYTE:
{ {
uint8_t *byte = va_arg(*vl, uint8_t *); 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; break;
} }
case DBUS_TYPE_BOOLEAN: case DBUS_TYPE_BOOLEAN:
{ {
Eina_Bool *boolean = va_arg(*vl, Eina_Bool *); Eina_Bool *boolean = va_arg(*vl, Eina_Bool *);
dbus_bool_t val;
dbus_message_iter_get_basic(iter, &val); dbus_message_iter_get_basic(iter, &val);
*boolean = val; *boolean = val.bool_val;
break; break;
} }
case DBUS_TYPE_INT16: case DBUS_TYPE_INT16:
{ {
int16_t *int16 = va_arg(*vl, int16_t *); 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; break;
} }
case DBUS_TYPE_UINT16: case DBUS_TYPE_UINT16:
{ {
uint16_t *uint16 = va_arg(*vl, uint16_t *); 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; break;
} }
case DBUS_TYPE_INT32: case DBUS_TYPE_INT32:
@ -653,31 +657,36 @@ get_basic(char type, DBusMessageIter *iter, va_list *vl)
#endif #endif
{ {
int32_t *int32 = va_arg(*vl, int32_t *); 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; break;
} }
case DBUS_TYPE_UINT32: case DBUS_TYPE_UINT32:
{ {
uint32_t *uint32 = va_arg(*vl, uint32_t *); 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; break;
} }
case DBUS_TYPE_INT64: case DBUS_TYPE_INT64:
{ {
int64_t *int64 = va_arg(*vl, int64_t *); 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; break;
} }
case DBUS_TYPE_UINT64: case DBUS_TYPE_UINT64:
{ {
uint64_t *uint64 = va_arg(*vl, uint64_t *); 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; break;
} }
case DBUS_TYPE_DOUBLE: case DBUS_TYPE_DOUBLE:
{ {
double *double_ieee = va_arg(*vl, 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; break;
} }
case DBUS_TYPE_STRING: case DBUS_TYPE_STRING:
@ -685,7 +694,8 @@ get_basic(char type, DBusMessageIter *iter, va_list *vl)
case DBUS_TYPE_SIGNATURE: case DBUS_TYPE_SIGNATURE:
{ {
char **string = va_arg(*vl, char**); char **string = va_arg(*vl, char**);
dbus_message_iter_get_basic(iter, string); dbus_message_iter_get_basic(iter, &val);
*string = val.str;
break; break;
} }
default: default: