This commit does several more strictly check for dbus-send as its usage
suggested.
* now --address is an invalid option but --address=, this just like the
others, say --reply-timeout=, --dest=, --type=
* --print-reply= only take an optional argument "=literal"
* --print-reply= will cause error with missing MSEC and invalid MSEC
will cause invalid value error
* --dest= will cause error with missing a NAME and also call
dbus_validate_bus_name to verify the NAME
Signed-off-by: Chengwei Yang <chengwei.yang@intel.com>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=65424
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
type = DBUS_BUS_SESSION;
session_or_system = TRUE;
}
type = DBUS_BUS_SESSION;
session_or_system = TRUE;
}
- else if (strstr (arg, "--address") == arg)
+ else if (strstr (arg, "--address=") == arg)
- address = strchr (arg, '=');
-
- if (address == NULL)
+ if (*(strchr (arg, '=') + 1) == '\0')
{
fprintf (stderr, "\"--address=\" requires an ADDRESS\n");
usage (1);
}
{
fprintf (stderr, "\"--address=\" requires an ADDRESS\n");
usage (1);
}
- else
- {
- address = address + 1;
- }
+ address = strchr (arg, '=') + 1;
}
else if (strncmp (arg, "--print-reply", 13) == 0)
{
print_reply = TRUE;
message_type = DBUS_MESSAGE_TYPE_METHOD_CALL;
}
else if (strncmp (arg, "--print-reply", 13) == 0)
{
print_reply = TRUE;
message_type = DBUS_MESSAGE_TYPE_METHOD_CALL;
- if (*(arg + 13) != '\0')
+ if (strcmp (arg + 13, "=literal") == 0)
print_reply_literal = TRUE;
print_reply_literal = TRUE;
+ else if (*(arg + 13) != '\0')
+ {
+ fprintf (stderr, "invalid value (%s) of \"--print-reply\"\n", arg + 13);
+ usage (1);
+ }
}
else if (strstr (arg, "--reply-timeout=") == arg)
{
}
else if (strstr (arg, "--reply-timeout=") == arg)
{
+ if (*(strchr (arg, '=') + 1) == '\0')
+ {
+ fprintf (stderr, "\"--reply-timeout=\" requires an MSEC\n");
+ usage (1);
+ }
reply_timeout = strtol (strchr (arg, '=') + 1,
NULL, 10);
reply_timeout = strtol (strchr (arg, '=') + 1,
NULL, 10);
+ if (reply_timeout <= 0)
+ {
+ fprintf (stderr, "invalid value (%s) of \"--reply-timeout\"\n",
+ strchr (arg, '=') + 1);
+ usage (1);
+ }
}
else if (strstr (arg, "--dest=") == arg)
}
else if (strstr (arg, "--dest=") == arg)
- dest = strchr (arg, '=') + 1;
+ {
+ if (*(strchr (arg, '=') + 1) == '\0')
+ {
+ fprintf (stderr, "\"--dest=\" requires an NAME\n");
+ usage (1);
+ }
+ dest = strchr (arg, '=') + 1;
+ }
else if (strstr (arg, "--type=") == arg)
type_str = strchr (arg, '=') + 1;
else if (!strcmp(arg, "--help"))
else if (strstr (arg, "--type=") == arg)
type_str = strchr (arg, '=') + 1;
else if (!strcmp(arg, "--help"))
dbus_error_init (&error);
dbus_error_init (&error);
+ if (!dbus_validate_bus_name (dest, &error))
+ {
+ fprintf (stderr, "invalid value (%s) of \"--dest\"\n", dest);
+ usage (1);
+ }
+
if (address != NULL)
{
connection = dbus_connection_open (address, &error);
if (address != NULL)
{
connection = dbus_connection_open (address, &error);