77e9234
From 201b71d13882bf963d41845b88401ce5f90c7a9b Mon Sep 17 00:00:00 2001
77e9234
From: Bastien Nocera <hadess@hadess.net>
77e9234
Date: Mon, 14 Dec 2009 11:58:54 +0000
77e9234
Subject: [PATCH 1/2] Fix memory leaks when using dbus_g_method_get_sender()
77e9234
77e9234
---
77e9234
 lib/bluetooth-agent.c |   64 ++++++++++++++++++++++++++++++++++++------------
77e9234
 lib/obex-agent.c      |   32 ++++++++++++++++++------
77e9234
 2 files changed, 72 insertions(+), 24 deletions(-)
77e9234
77e9234
diff --git a/lib/bluetooth-agent.c b/lib/bluetooth-agent.c
77e9234
index 00e8dcb..a08eb9c 100644
77e9234
--- a/lib/bluetooth-agent.c
77e9234
+++ b/lib/bluetooth-agent.c
77e9234
@@ -80,14 +80,18 @@ static gboolean bluetooth_agent_request_pin_code(BluetoothAgent *agent,
77e9234
 			const char *path, DBusGMethodInvocation *context)
77e9234
 {
77e9234
 	BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
77e9234
-	const char *sender = dbus_g_method_get_sender(context);
77e9234
+	char *sender = dbus_g_method_get_sender(context);
77e9234
 	DBusGProxy *device;
77e9234
 	gboolean result = FALSE;
77e9234
 
77e9234
 	DBG("agent %p sender %s", agent, sender);
77e9234
 
77e9234
-	if (g_str_equal(sender, priv->busname) == FALSE)
77e9234
+	if (g_str_equal(sender, priv->busname) == FALSE) {
77e9234
+		g_free (sender);
77e9234
 		return FALSE;
77e9234
+	}
77e9234
+
77e9234
+	g_free (sender);
77e9234
 
77e9234
 	if (priv->pincode_func) {
77e9234
 		if (priv->adapter != NULL)
77e9234
@@ -110,14 +114,18 @@ static gboolean bluetooth_agent_request_passkey(BluetoothAgent *agent,
77e9234
 			const char *path, DBusGMethodInvocation *context)
77e9234
 {
77e9234
 	BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
77e9234
-	const char *sender = dbus_g_method_get_sender(context);
77e9234
+	char *sender = dbus_g_method_get_sender(context);
77e9234
 	DBusGProxy *device;
77e9234
 	gboolean result = FALSE;
77e9234
 
77e9234
 	DBG("agent %p sender %s", agent, sender);
77e9234
 
77e9234
-	if (g_str_equal(sender, priv->busname) == FALSE)
77e9234
+	if (g_str_equal(sender, priv->busname) == FALSE) {
77e9234
+		g_free (sender);
77e9234
 		return FALSE;
77e9234
+	}
77e9234
+
77e9234
+	g_free (sender);
77e9234
 
77e9234
 	if (priv->passkey_func) {
77e9234
 		if (priv->adapter != NULL)
77e9234
@@ -141,14 +149,18 @@ static gboolean bluetooth_agent_display_passkey(BluetoothAgent *agent,
77e9234
 						DBusGMethodInvocation *context)
77e9234
 {
77e9234
 	BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
77e9234
-	const char *sender = dbus_g_method_get_sender(context);
77e9234
+	char *sender = dbus_g_method_get_sender(context);
77e9234
 	DBusGProxy *device;
77e9234
 	gboolean result = FALSE;
77e9234
 
77e9234
 	DBG("agent %p sender %s", agent, sender);
77e9234
 
77e9234
-	if (g_str_equal(sender, priv->busname) == FALSE)
77e9234
+	if (g_str_equal(sender, priv->busname) == FALSE) {
77e9234
+		g_free (sender);
77e9234
 		return FALSE;
77e9234
+	}
77e9234
+
77e9234
+	g_free (sender);
77e9234
 
77e9234
 	if (priv->display_func) {
77e9234
 		if (priv->adapter != NULL)
77e9234
@@ -172,14 +184,18 @@ static gboolean bluetooth_agent_request_confirmation(BluetoothAgent *agent,
77e9234
 						DBusGMethodInvocation *context)
77e9234
 {
77e9234
 	BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
77e9234
-	const char *sender = dbus_g_method_get_sender(context);
77e9234
+	char *sender = dbus_g_method_get_sender(context);
77e9234
 	DBusGProxy *device;
77e9234
 	gboolean result = FALSE;
77e9234
 
77e9234
 	DBG("agent %p sender %s", agent, sender);
77e9234
 
77e9234
-	if (g_str_equal(sender, priv->busname) == FALSE)
77e9234
+	if (g_str_equal(sender, priv->busname) == FALSE) {
77e9234
+		g_free (sender);
77e9234
 		return FALSE;
77e9234
+	}
77e9234
+
77e9234
+	g_free (sender);
77e9234
 
77e9234
 	if (priv->confirm_func) {
77e9234
 		if (priv->adapter != NULL)
77e9234
@@ -203,14 +219,18 @@ static gboolean bluetooth_agent_authorize(BluetoothAgent *agent,
77e9234
 						DBusGMethodInvocation *context)
77e9234
 {
77e9234
 	BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
77e9234
-	const char *sender = dbus_g_method_get_sender(context);
77e9234
+	char *sender = dbus_g_method_get_sender(context);
77e9234
 	DBusGProxy *device;
77e9234
 	gboolean result = FALSE;
77e9234
 
77e9234
 	DBG("agent %p sender %s", agent, sender);
77e9234
 
77e9234
-	if (g_str_equal(sender, priv->busname) == FALSE)
77e9234
+	if (g_str_equal(sender, priv->busname) == FALSE) {
77e9234
+		g_free (sender);
77e9234
 		return FALSE;
77e9234
+	}
77e9234
+
77e9234
+	g_free (sender);
77e9234
 
77e9234
 	if (priv->authorize_func) {
77e9234
 		if (priv->adapter != NULL)
77e9234
@@ -233,12 +253,16 @@ static gboolean bluetooth_agent_confirm_mode(BluetoothAgent *agent,
77e9234
 			const char *mode, DBusGMethodInvocation *context)
77e9234
 {
77e9234
 	BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
77e9234
-	const char *sender = dbus_g_method_get_sender(context);
77e9234
+	char *sender = dbus_g_method_get_sender(context);
77e9234
 
77e9234
 	DBG("agent %p sender %s", agent, sender);
77e9234
 
77e9234
-	if (g_str_equal(sender, priv->busname) == FALSE)
77e9234
+	if (g_str_equal(sender, priv->busname) == FALSE) {
77e9234
+		g_free (sender);
77e9234
 		return FALSE;
77e9234
+	}
77e9234
+
77e9234
+	g_free (sender);
77e9234
 
77e9234
 	dbus_g_method_return(context);
77e9234
 
77e9234
@@ -249,13 +273,17 @@ static gboolean bluetooth_agent_cancel(BluetoothAgent *agent,
77e9234
 						DBusGMethodInvocation *context)
77e9234
 {
77e9234
 	BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
77e9234
-	const char *sender = dbus_g_method_get_sender(context);
77e9234
+	char *sender = dbus_g_method_get_sender(context);
77e9234
 	gboolean result = FALSE;
77e9234
 
77e9234
 	DBG("agent %p sender %s", agent, sender);
77e9234
 
77e9234
-	if (g_str_equal(sender, priv->busname) == FALSE)
77e9234
+	if (g_str_equal(sender, priv->busname) == FALSE) {
77e9234
+		g_free (sender);
77e9234
 		return FALSE;
77e9234
+	}
77e9234
+
77e9234
+	g_free (sender);
77e9234
 
77e9234
 	if (priv->cancel_func)
77e9234
 		result = priv->cancel_func(context, priv->cancel_data);
77e9234
@@ -267,12 +295,16 @@ static gboolean bluetooth_agent_release(BluetoothAgent *agent,
77e9234
 						DBusGMethodInvocation *context)
77e9234
 {
77e9234
 	BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
77e9234
-	const char *sender = dbus_g_method_get_sender(context);
77e9234
+	char *sender = dbus_g_method_get_sender(context);
77e9234
 
77e9234
 	DBG("agent %p sender %s", agent, sender);
77e9234
 
77e9234
-	if (g_str_equal(sender, priv->busname) == FALSE)
77e9234
+	if (g_str_equal(sender, priv->busname) == FALSE) {
77e9234
+		g_free (sender);
77e9234
 		return FALSE;
77e9234
+	}
77e9234
+
77e9234
+	g_free (sender);
77e9234
 
77e9234
 	g_object_unref(agent);
77e9234
 
77e9234
diff --git a/lib/obex-agent.c b/lib/obex-agent.c
77e9234
index 714dc6a..38b2fde 100644
77e9234
--- a/lib/obex-agent.c
77e9234
+++ b/lib/obex-agent.c
77e9234
@@ -73,13 +73,17 @@ static gboolean obex_agent_request(ObexAgent *agent, const char *path,
77e9234
 						DBusGMethodInvocation *context)
77e9234
 {
77e9234
 	ObexAgentPrivate *priv = OBEX_AGENT_GET_PRIVATE(agent);
77e9234
-	const char *sender = dbus_g_method_get_sender(context);
77e9234
+	char *sender = dbus_g_method_get_sender(context);
77e9234
 	gboolean result = FALSE;
77e9234
 
77e9234
 	DBG("agent %p sender %s", agent, sender);
77e9234
 
77e9234
-	if (g_str_equal(sender, priv->busname) == FALSE)
77e9234
+	if (g_str_equal(sender, priv->busname) == FALSE) {
77e9234
+		g_free (sender);
77e9234
 		return FALSE;
77e9234
+	}
77e9234
+
77e9234
+	g_free (sender);
77e9234
 
77e9234
 	if (priv->request_func) {
77e9234
 		DBusGProxy *proxy;
77e9234
@@ -102,13 +106,17 @@ static gboolean obex_agent_progress(ObexAgent *agent, const char *path,
77e9234
 			guint64 transferred, DBusGMethodInvocation *context)
77e9234
 {
77e9234
 	ObexAgentPrivate *priv = OBEX_AGENT_GET_PRIVATE(agent);
77e9234
-	const char *sender = dbus_g_method_get_sender(context);
77e9234
+	char *sender = dbus_g_method_get_sender(context);
77e9234
 	gboolean result = FALSE;
77e9234
 
77e9234
 	DBG("agent %p sender %s", agent, sender);
77e9234
 
77e9234
-	if (g_str_equal(sender, priv->busname) == FALSE)
77e9234
+	if (g_str_equal(sender, priv->busname) == FALSE) {
77e9234
+		g_free (sender);
77e9234
 		return FALSE;
77e9234
+	}
77e9234
+
77e9234
+	g_free (sender);
77e9234
 
77e9234
 	if (priv->progress_func) {
77e9234
 		DBusGProxy *proxy;
77e9234
@@ -130,13 +138,17 @@ static gboolean obex_agent_complete(ObexAgent *agent, const char *path,
77e9234
 						DBusGMethodInvocation *context)
77e9234
 {
77e9234
 	ObexAgentPrivate *priv = OBEX_AGENT_GET_PRIVATE(agent);
77e9234
-	const char *sender = dbus_g_method_get_sender(context);
77e9234
+	char *sender = dbus_g_method_get_sender(context);
77e9234
 	gboolean result = FALSE;
77e9234
 
77e9234
 	DBG("agent %p sender %s", agent, sender);
77e9234
 
77e9234
-	if (g_str_equal(sender, priv->busname) == FALSE)
77e9234
+	if (g_str_equal(sender, priv->busname) == FALSE) {
77e9234
+		g_free (sender);
77e9234
 		return FALSE;
77e9234
+	}
77e9234
+
77e9234
+	g_free (sender);
77e9234
 
77e9234
 	if (priv->complete_func) {
77e9234
 		DBusGProxy *proxy;
77e9234
@@ -158,13 +170,17 @@ static gboolean obex_agent_release(ObexAgent *agent,
77e9234
 						DBusGMethodInvocation *context)
77e9234
 {
77e9234
 	ObexAgentPrivate *priv = OBEX_AGENT_GET_PRIVATE(agent);
77e9234
-	const char *sender = dbus_g_method_get_sender(context);
77e9234
+	char *sender = dbus_g_method_get_sender(context);
77e9234
 	gboolean result = FALSE;
77e9234
 
77e9234
 	DBG("agent %p sender %s", agent, sender);
77e9234
 
77e9234
-	if (g_str_equal(sender, priv->busname) == FALSE)
77e9234
+	if (g_str_equal(sender, priv->busname) == FALSE) {
77e9234
+		g_free (sender);
77e9234
 		return FALSE;
77e9234
+	}
77e9234
+
77e9234
+	g_free (sender);
77e9234
 
77e9234
 	if (priv->release_func)
77e9234
 		result = priv->release_func(context, priv->release_data);
77e9234
-- 
77e9234
1.6.5.2
77e9234