From: Adrian Szyndela Date: Mon, 18 Apr 2016 12:27:23 +0000 (+0200) Subject: fixed some compiler/Valgrind warnings X-Git-Tag: accepted/tizen/common/20160422.172237~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=78ded799dbcac7e2a883b874d816148b2d9df253;p=platform%2Fupstream%2Fdbus.git fixed some compiler/Valgrind warnings Change-Id: I5c9c0f7c5e50f89e69db9e5f000b181ebc98add6 --- diff --git a/dbus/dbus-marshal-gvariant.c b/dbus/dbus-marshal-gvariant.c index 6b4c877..5911d6a 100644 --- a/dbus/dbus-marshal-gvariant.c +++ b/dbus/dbus-marshal-gvariant.c @@ -120,7 +120,7 @@ append_offsets (DBusString *str, size_t *fields_offsets, size_t n_fields_offsets) { - int i; + size_t i; size_t array_size = _dbus_string_get_length (str) - FIRST_GVARIANT_FIELD_OFFSET; size_t offset_size = bus_gvariant_determine_word_size (array_size, n_fields_offsets); @@ -966,11 +966,7 @@ _dbus_reader_count_offsets (const DBusTypeReader *reader) int variables = 0; dbus_bool_t prev_is_variable = FALSE; int current_type; - int ending_char; - - /* if signature is not empty, it must be after initial parenthesis */ - /* empty signature has length 1 - only nul byte */ - _dbus_assert (reader->type_pos > 0); + int ending_char = 0; _dbus_type_reader_init_types_only (&r, reader->type_str, @@ -978,18 +974,26 @@ _dbus_reader_count_offsets (const DBusTypeReader *reader) r.gvariant = TRUE; r.klass = reader->klass; - /* Check what container we're in */ - switch (_dbus_string_get_byte (r.type_str, r.type_pos-1)) + /* In case we are in root container, we have signature without external parentheses. + * We go until ending nul, starting with position 0. + * Otherwise, we are in a container, so let's check what kind of container it is, + * and set proper terminating character. + */ + if (r.type_pos > 0) { - case DBUS_STRUCT_BEGIN_CHAR: - ending_char = DBUS_STRUCT_END_CHAR; - break; - case DBUS_DICT_ENTRY_BEGIN_CHAR: - ending_char = DBUS_DICT_ENTRY_END_CHAR; - break; - default: - _dbus_assert_not_reached ("function must be called inside structs or dict entries"); - break; + /* Check what container we're in */ + switch (_dbus_string_get_byte (r.type_str, r.type_pos-1)) + { + case DBUS_STRUCT_BEGIN_CHAR: + ending_char = DBUS_STRUCT_END_CHAR; + break; + case DBUS_DICT_ENTRY_BEGIN_CHAR: + ending_char = DBUS_DICT_ENTRY_END_CHAR; + break; + default: + _dbus_assert_not_reached ("function must be called inside structs or dict entries"); + break; + } } r.finished = (_dbus_string_get_byte (r.type_str, r.type_pos) == ending_char); diff --git a/dbus/dbus-valgrind-internal.h b/dbus/dbus-valgrind-internal.h index 6760b40..512db48 100644 --- a/dbus/dbus-valgrind-internal.h +++ b/dbus/dbus-valgrind-internal.h @@ -48,6 +48,13 @@ VALGRIND_MAKE_MEM_UNDEFINED (void *addr, } static inline int +VALGRIND_MAKE_MEM_DEFINED (void *addr, + size_t len) +{ + return 0; +} + +static inline int VALGRIND_PRINTF (const char *format, ...) { diff --git a/dbus/kdbus-common.c b/dbus/kdbus-common.c index 57a0a4d..0ad91af 100644 --- a/dbus/kdbus-common.c +++ b/dbus/kdbus-common.c @@ -27,6 +27,7 @@ #include "kdbus.h" #include "kdbus-common.h" #include "dbus-transport-kdbus.h" +#include "dbus-valgrind-internal.h" #include #include #include @@ -83,6 +84,17 @@ free_by_offset (kdbus_t *kdbus, { struct kdbus_cmd_free cmd; + /* + * Kdbus requires to initialize ioctl params partially. Some parts + * are for data passed from user to kernel, and other parts + * for data passed from kernel to user. + * + * Valgrind detects when uninitialized data is passed to kernel + * and has no way to know that it is meant to be filled by kernel. + * Thus, we initialize params for Valgrind to stop complaining. + */ + VALGRIND_MAKE_MEM_DEFINED (&cmd, sizeof (cmd)); + cmd.size = sizeof (cmd); cmd.offset = offset; cmd.flags = 0; @@ -353,6 +365,8 @@ _kdbus_hello (kdbus_t *kdbus, if (NULL == hello) return -ENOMEM; + VALGRIND_MAKE_MEM_DEFINED (hello, hello_size); + hello->flags = flags; hello->attach_flags_send = attach_flags_send; hello->attach_flags_recv = attach_flags_recv; @@ -412,6 +426,8 @@ _kdbus_send (kdbus_t *kdbus, { struct kdbus_cmd_send cmd; + VALGRIND_MAKE_MEM_DEFINED (&cmd, sizeof (cmd)); + cmd.size = sizeof (cmd); cmd.msg_address = (__u64)msg; cmd.flags = flags; @@ -438,6 +454,8 @@ _kdbus_recv (kdbus_t *kdbus, { struct kdbus_cmd_recv cmd; + VALGRIND_MAKE_MEM_DEFINED (&cmd, sizeof (cmd)); + cmd.size = sizeof (cmd); cmd.flags = flags; cmd.priority = priority; @@ -458,6 +476,8 @@ _kdbus_list (kdbus_t *kdbus, { struct kdbus_cmd_list cmd; + VALGRIND_MAKE_MEM_DEFINED (&cmd, sizeof (cmd)); + cmd.size = sizeof (cmd); cmd.flags = flags; @@ -501,6 +521,8 @@ _kdbus_new_cmd_match (kdbus_t *kdbus, if (NULL == cmd) return NULL; + VALGRIND_MAKE_MEM_DEFINED (cmd, cmd_size); + cmd->size = cmd_size; cmd->flags = flags; cmd->cookie = cookie; @@ -984,6 +1006,8 @@ _kdbus_remove_match (kdbus_t *kdbus, { struct kdbus_cmd_match cmd; + VALGRIND_MAKE_MEM_DEFINED (&cmd, sizeof (cmd)); + cmd.cookie = cookie; cmd.size = sizeof (struct kdbus_cmd_match); cmd.flags = 0;