summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@collabora.com>2021-06-21 12:04:05 +0100
committerSimon McVittie <smcv@collabora.com>2021-06-21 12:04:05 +0100
commita42a07a1fb8afe559e1f2dcc636c8d2a81e44f89 (patch)
treedb45946ee474cd730e0565b1b3e4be72e40d2688
parentdde5c8fdc42048054683ca985899ef67466ac27a (diff)
dbus-send: Validate interface, member names before use
Instead of a failed check or assertion failure and a core dump, let's produce an error message on stderr and a graceful nonzero exit status. It's still not going to *work*, but at least we can avoid crashing. $ dbus-send / com.example.Nope..Nope Interface name was not valid: 'com.example.Nope.' $ dbus-send / com.example.Nope.0 Invalid signal name: Member name was not valid: '0' Resolves: dbus#338 Signed-off-by: Simon McVittie <smcv@collabora.com>
-rw-r--r--tools/dbus-send.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/tools/dbus-send.c b/tools/dbus-send.c
index b6b2d675..65f9854e 100644
--- a/tools/dbus-send.c
+++ b/tools/dbus-send.c
@@ -488,7 +488,23 @@ main (int argc, char *argv[])
exit (1);
}
*last_dot = '\0';
-
+
+ if (!dbus_validate_interface (name, &error))
+ {
+ /* Typically this is "Interface name was not valid: \"xxx\""
+ * so we don't need to prefix anything special */
+ fprintf (stderr, "%s\n", error.message);
+ dbus_error_free (&error);
+ exit (1);
+ }
+
+ if (!dbus_validate_member (last_dot + 1, &error))
+ {
+ fprintf (stderr, "Invalid method name: %s\n", error.message);
+ dbus_error_free (&error);
+ exit (1);
+ }
+
message = dbus_message_new_method_call (NULL,
path,
name,
@@ -508,7 +524,21 @@ main (int argc, char *argv[])
exit (1);
}
*last_dot = '\0';
-
+
+ if (!dbus_validate_interface (name, &error))
+ {
+ fprintf (stderr, "%s\n", error.message);
+ dbus_error_free (&error);
+ exit (1);
+ }
+
+ if (!dbus_validate_member (last_dot + 1, &error))
+ {
+ fprintf (stderr, "Invalid signal name: %s\n", error.message);
+ dbus_error_free (&error);
+ exit (1);
+ }
+
message = dbus_message_new_signal (path, name, last_dot + 1);
handle_oom (message != NULL);
}