From a8e72f4f9b26914723f87fb2c5fbc10647f4dc3b Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Sun, 23 Mar 2008 16:46:08 +0000 Subject: [PATCH] * dbusbind.c (xd_read_message): Removed extra copying of message strings. Check for NULL `interface' or `member'. --- src/ChangeLog | 5 +++++ src/dbusbind.c | 30 ++++++++++++++---------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 7e010850b19..7badf53f13a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2008-03-23 David Hansen (tiny change) + + * dbusbind.c (xd_read_message): Removed extra copying of message + strings. Check for NULL `interface' or `member'. + 2008-03-22 Eli Zaretskii * w32.c (readdir): If FindFirstFile/FindNextFile return in diff --git a/src/dbusbind.c b/src/dbusbind.c index 4bc48f3b6e9..029c53640de 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -165,7 +165,7 @@ Lisp_Object Vdbus_debug; : DBUS_TYPE_INVALID) /* Return a list pointer which does not have a Lisp symbol as car. */ -#define XD_NEXT_VALUE(object) \ +#define XD_NEXT_VALUE(object) \ ((XD_DBUS_TYPE_P (CAR_SAFE (object))) ? CDR_SAFE (object) : object) /* Compute SIGNATURE of OBJECT. It must have a form that it can be @@ -1140,10 +1140,7 @@ xd_read_message (bus) DBusMessageIter iter; unsigned int dtype; int mtype; - char uname[DBUS_MAXIMUM_NAME_LENGTH]; - char path[DBUS_MAXIMUM_MATCH_RULE_LENGTH]; /* Unlimited in D-Bus spec. */ - char interface[DBUS_MAXIMUM_NAME_LENGTH]; - char member[DBUS_MAXIMUM_NAME_LENGTH]; + const char *uname, *path, *interface, *member; /* Open a connection to the bus. */ connection = xd_initialize (bus); @@ -1175,11 +1172,15 @@ xd_read_message (bus) /* Read message type, unique name, object path, interface and member from the message. */ - mtype = dbus_message_get_type (dmessage); - strcpy (uname, dbus_message_get_sender (dmessage)); - strcpy (path, dbus_message_get_path (dmessage)); - strcpy (interface, dbus_message_get_interface (dmessage)); - strcpy (member, dbus_message_get_member (dmessage)); + mtype = dbus_message_get_type (dmessage); + uname = dbus_message_get_sender (dmessage); + path = dbus_message_get_path (dmessage); + interface = dbus_message_get_interface (dmessage); + member = dbus_message_get_member (dmessage); + + /* dbus-registered-functions-table requires non nil interface and member. */ + if ((NULL == interface) || (NULL == member)) + goto cleanup; XD_DEBUG_MESSAGE ("Event received: %d %s %s %s %s %s", mtype, uname, path, interface, member, @@ -1210,11 +1211,8 @@ xd_read_message (bus) args); /* Add uname, path, interface and member to the event. */ - event.arg = Fcons ((member == NULL ? Qnil : build_string (member)), - event.arg); - event.arg = Fcons ((interface == NULL - ? Qnil : build_string (interface)), - event.arg); + event.arg = Fcons (build_string (member), event.arg); + event.arg = Fcons (build_string (interface), event.arg); event.arg = Fcons ((path == NULL ? Qnil : build_string (path)), event.arg); event.arg = Fcons ((uname == NULL ? Qnil : build_string (uname)), @@ -1235,7 +1233,7 @@ xd_read_message (bus) value = CDR_SAFE (value); } - /* Cleanup. */ + cleanup: dbus_message_unref (dmessage); RETURN_UNGCPRO (Qnil); } -- 2.39.2