summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--bus/dispatch.c11
-rw-r--r--dbus/dbus-sysdeps.c6
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 <andersca@codefactory.se>
+
+ * 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 <hp@pobox.com>
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)
{