From 73d7ba1d1339ede5f638e2962e187555aa8c7aa3 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Mon, 17 Mar 2003 06:49:33 +0000 Subject: 2003-03-17 Anders Carlsson * bus/dispatch.c: (bus_dispatch): Refetch the service name since it may have been reallocated when dbus_message_set_sender was called. * dbus/dbus-sysdeps.c: (_dbus_accept): Add address and address length variables and use them to stop valgrind from complaining. --- ChangeLog | 10 ++++++++++ bus/dispatch.c | 11 +++++++++-- dbus/dbus-sysdeps.c | 6 +++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0796f2a0..1b5ee00c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2003-03-17 Anders Carlsson + + * bus/dispatch.c: (bus_dispatch): + Refetch the service name since it may have been reallocated + when dbus_message_set_sender was called. + + * dbus/dbus-sysdeps.c: (_dbus_accept): + Add address and address length variables and use them to stop + valgrind from complaining. + 2003-03-17 Havoc Pennington All tests pass, no memleaks, no valgrind complaints. diff --git a/bus/dispatch.c b/bus/dispatch.c index 5365a11d..33289e1f 100644 --- a/bus/dispatch.c +++ b/bus/dispatch.c @@ -208,18 +208,25 @@ bus_dispatch (DBusConnection *connection, { sender = bus_connection_get_name (connection); _dbus_assert (sender != NULL); - + if (!dbus_message_set_sender (message, sender)) { BUS_SET_OOM (&error); goto out; } + + /* We need to refetch the service name here, because + * dbus_message_set_sender can cause the header to be + * reallocated, and thus the service_name pointer will become + * invalid. + */ + service_name = dbus_message_get_service (message); } if (strcmp (service_name, DBUS_SERVICE_DBUS) == 0) /* to bus driver */ { if (!bus_driver_handle_message (connection, transaction, message, &error)) - goto out; + goto out; } else if (!bus_connection_is_active (connection)) /* clients must talk to bus driver first */ { diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c index 8abcc5fc..5a79e8fc 100644 --- a/dbus/dbus-sysdeps.c +++ b/dbus/dbus-sysdeps.c @@ -786,9 +786,13 @@ int _dbus_accept (int listen_fd) { int client_fd; + struct sockaddr addr; + socklen_t addrlen; + + addrlen = sizeof (addr); retry: - client_fd = accept (listen_fd, NULL, NULL); + client_fd = accept (listen_fd, &addr, &addrlen); if (client_fd < 0) { -- cgit