From e64875a42c11a35acc252478fa41fb56c36ec459 Mon Sep 17 00:00:00 2001 From: "sanghyeok.oh" Date: Wed, 31 Aug 2016 17:35:40 +0900 Subject: [PATCH] Bugfix:abnormal using of _dbus_validate_bus_name Change-Id: I1eb91da587469381f69ada2939a980d8ea1f40e1 Signed-off-by: sanghyeok.oh --- dbus/dbus-transport-kdbus.c | 15 ++++++++++++--- dbus/kdbus-common.c | 7 ++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/dbus/dbus-transport-kdbus.c b/dbus/dbus-transport-kdbus.c index 591df86..de70c27 100755 --- a/dbus/dbus-transport-kdbus.c +++ b/dbus/dbus-transport-kdbus.c @@ -1487,9 +1487,6 @@ add_match_kdbus (DBusTransportKdbus *transport, rule_cookie = match_rule_get_cookie (rule); rule_sender = _match_rule_get_sender (rule); - if (_match_rule_get_args_len(rule) == 1) - rule_arg0 = _match_rule_get_args(rule, 0); - /* * First check if it is org.freedesktop.DBus's NameOwnerChanged or any * org.freedesktop.DBus combination that includes this, @@ -1504,6 +1501,18 @@ add_match_kdbus (DBusTransportKdbus *transport, && !strcmp_existing (_match_rule_get_interface (rule), DBUS_INTERFACE_DBUS) && !strcmp_existing (_match_rule_get_path (rule), DBUS_PATH_DBUS)) { + if (_match_rule_get_args_len(rule) == 1) + { + rule_arg0 = _match_rule_get_args(rule, 0); + if (rule_arg0) + { + DBusString str; + _dbus_string_init_const (&str, rule_arg0); + ret = _dbus_validate_bus_name (&str, 0, _dbus_string_get_length (&str)); + if (!ret) + return FALSE; + } + } if (!strcmp_existing (_match_rule_get_member (rule), "NameOwnerChanged")) { ret = _kdbus_add_match_name_change (transport->kdbus, diff --git a/dbus/kdbus-common.c b/dbus/kdbus-common.c index e1b97f9..3b5f420 100755 --- a/dbus/kdbus-common.c +++ b/dbus/kdbus-common.c @@ -663,10 +663,10 @@ _kdbus_add_match_name_change (kdbus_t *kdbus, unsigned int len = 0; if (name) - len = strlen(name) + 1; + len = strlen(name) + 1; /* name = NULL or Well-known Name */ - if (name == NULL || (name[0] != ':' && _dbus_validate_bus_name (&name, 0, _dbus_string_get_length (&name)))) { + if (name == NULL || (name[0] != ':')) { cmd = _kdbus_new_cmd_match (kdbus, KDBUS_ITEM_SIZE (sizeof (struct kdbus_notify_name_change) + len), flags, @@ -718,7 +718,8 @@ _kdbus_add_match_id_change (kdbus_t *kdbus, int ret; /* name = NULL or Unique Name */ - if (name == NULL || (name[0] == ':' && _dbus_validate_bus_name (&name, 0, _dbus_string_get_length (&name)))) { + if (name == NULL || name[0] == ':') + { cmd = _kdbus_new_cmd_match (kdbus, KDBUS_ITEM_SIZE (sizeof (struct kdbus_notify_id_change)), flags, -- 2.7.4