jobextra/dbus-glib/dbus-glib-bash-completion.patch

163 lines
5 KiB
Diff

From 484e483d1fb98b56ebd2cb7d73a7f0851f7b4ab5 Mon Sep 17 00:00:00 2001
From: Koki Fukuda <ko.fu.dev@gmail.com>
Date: Wed, 5 May 2021 21:59:34 +0900
Subject: [PATCH] Fix bash completion and its helper
This fixes the following errors:
* Completion script causing an usage error.
* Better error handling in helper program in case the bus
is inaccessible.
---
dbus/dbus-bash-completion-helper.c | 43 ++++++++++++++++++++++++++++++
dbus/dbus-bash-completion.sh.in | 3 +--
2 files changed, 44 insertions(+), 2 deletions(-)
diff --git a/dbus/dbus-bash-completion-helper.c b/dbus/dbus-bash-completion-helper.c
index 6240ed6..2dcae22 100644
--- a/dbus/dbus-bash-completion-helper.c
+++ b/dbus/dbus-bash-completion-helper.c
@@ -56,6 +56,11 @@ print_services (DBusConnection *connection)
-1,
&error);
dbus_message_unref (message);
+
+ if (reply == NULL) {
+ goto fail;
+ }
+
dbus_message_iter_init (reply, &iter);
dbus_message_iter_recurse (&iter, &iter_array);
while (dbus_message_iter_get_arg_type (&iter_array) != DBUS_TYPE_INVALID)
@@ -77,6 +82,11 @@ print_services (DBusConnection *connection)
-1,
&error);
dbus_message_unref (message);
+
+ if (reply == NULL) {
+ goto fail;
+ }
+
dbus_message_iter_init (reply, &iter);
dbus_message_iter_recurse (&iter, &iter_array);
while (dbus_message_iter_get_arg_type (&iter_array) != DBUS_TYPE_INVALID)
@@ -86,6 +96,9 @@ print_services (DBusConnection *connection)
dbus_message_iter_next (&iter_array);
}
dbus_message_unref (reply);
+
+ fail:
+ dbus_error_free(&error);
}
static gboolean
@@ -139,6 +152,11 @@ print_objects (DBusConnection *connection, const char *service_name, const char
-1,
&error);
dbus_message_unref (message);
+
+ if (reply == NULL) {
+ goto fail;
+ }
+
dbus_message_iter_init (reply, &iter);
dbus_message_iter_get_basic (&iter, &introspection_xml);
@@ -167,6 +185,9 @@ print_objects (DBusConnection *connection, const char *service_name, const char
node_info_unref (root);
dbus_message_unref (reply);
+
+ fail:
+ dbus_error_free(&error);
}
static gboolean
@@ -192,6 +213,11 @@ is_object_path_with_interfaces (DBusConnection *connection, const char *service_
-1,
&error);
dbus_message_unref (message);
+
+ if (reply == NULL) {
+ goto fail;
+ }
+
dbus_message_iter_init (reply, &iter);
dbus_message_iter_get_basic (&iter, &introspection_xml);
@@ -203,6 +229,9 @@ is_object_path_with_interfaces (DBusConnection *connection, const char *service_
node_info_unref (root);
dbus_message_unref (reply);
+ fail:
+ dbus_error_free(&error);
+
return ret;
}
@@ -228,6 +257,11 @@ print_methods (DBusConnection *connection, const char *service_name, const char
-1,
&error);
dbus_message_unref (message);
+
+ if (reply == NULL) {
+ goto fail;
+ }
+
dbus_message_iter_init (reply, &iter);
dbus_message_iter_get_basic (&iter, &introspection_xml);
@@ -247,6 +281,9 @@ print_methods (DBusConnection *connection, const char *service_name, const char
}
node_info_unref (root);
dbus_message_unref (reply);
+
+ fail:
+ dbus_error_free(&error);
}
static void
@@ -285,6 +322,11 @@ print_signature (DBusConnection *connection, const char *service_name, const cha
-1,
&error);
dbus_message_unref (message);
+
+ if (reply == NULL) {
+ goto fail;
+ }
+
dbus_message_iter_init (reply, &iter);
dbus_message_iter_get_basic (&iter, &introspection_xml);
@@ -324,6 +366,7 @@ print_signature (DBusConnection *connection, const char *service_name, const cha
node_info_unref (root);
dbus_message_unref (reply);
fail:
+ dbus_error_free(&error);
g_free (method_name);
g_free (interface_name);
}
diff --git a/dbus/dbus-bash-completion.sh.in b/dbus/dbus-bash-completion.sh.in
index a7751da..e582438 100644
--- a/dbus/dbus-bash-completion.sh.in
+++ b/dbus/dbus-bash-completion.sh.in
@@ -5,7 +5,6 @@
################################################################################
__dbus_send() {
- local IFS=$'\n'
local cur="${COMP_WORDS[COMP_CWORD]}"
# --name=value style option
@@ -13,7 +12,7 @@ __dbus_send() {
cur=${cur/*=/}
fi
- COMPREPLY=($(compgen -W "$(@libexecdir@/dbus-bash-completion-helper dbus-send ${COMP_WORDS[@]:0})" -- $cur))
+ COMPREPLY=($(compgen -W "$(@libexecdir@/dbus-bash-completion-helper dbus-send "${COMP_LINE}")" -- $cur))
}
################################################################################
--
GitLab