[pulseaudio-discuss] [PATCH] raop: Fix a memory leak

Tanu Kaskinen tanu.kaskinen at linux.intel.com
Wed Nov 19 08:43:07 PST 2014


a.path_or_host wasn't freed after calling pa_parse_address().
---

I needed pa_parse_address() in my module-tunnel-manager work, and I
found the interface to be prone to memory leaks, so I decided to
check all call sites of the function. I found one leak. I've added it
to my todo list to make the function interface safer, but I don't
expect to get around to that task any time soon, so if anyone else
wants to fix it, be my guest.


 src/modules/raop/raop_client.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/modules/raop/raop_client.c b/src/modules/raop/raop_client.c
index 5bb0bb4..7a6d009 100644
--- a/src/modules/raop/raop_client.c
+++ b/src/modules/raop/raop_client.c
@@ -372,14 +372,19 @@ pa_raop_client* pa_raop_client_new(pa_core *core, const char* host) {
     pa_assert(core);
     pa_assert(host);
 
-    if (pa_parse_address(host, &a) < 0 || a.type == PA_PARSED_ADDRESS_UNIX)
+    if (pa_parse_address(host, &a) < 0)
         return NULL;
 
+    if (a.type == PA_PARSED_ADDRESS_UNIX) {
+        pa_xfree(a.path_or_host);
+        return NULL;
+    }
+
     c = pa_xnew0(pa_raop_client, 1);
     c->core = core;
     c->fd = -1;
 
-    c->host = pa_xstrdup(a.path_or_host);
+    c->host = a.path_or_host;
     if (a.port)
         c->port = a.port;
     else
-- 
1.9.3



More information about the pulseaudio-discuss mailing list