2011-08-06 10:40:51

by Daniele Forsi

[permalink] [raw]
Subject: Memory leak in obexd/plugins/opp.c

cppcheck shows this:
[./plugins/opp.c:146]: (error) Memory leak: folder

I'm not sending a patch because I can't test it and it seems that the
g_strdup()'s can be removed because the folder and name variables are
only used as arguments to g_build_filename()
--
Daniele Forsi


2011-08-09 07:50:38

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: Memory leak in obexd/plugins/opp.c

Hi Daniele,

On Sat, Aug 6, 2011 at 1:40 PM, Daniele Forsi <[email protected]> wrote:
> cppcheck shows this:
> [./plugins/opp.c:146]: (error) Memory leak: folder
>
> I'm not sending a patch because I can't test it and it seems that the
> g_strdup()'s can be removed because the folder and name variables are
> only used as arguments to g_build_filename()

Thanks for reporting this, in fact both folder and name ('\0') seems
to be leaking, they are always allocated because of
manager_request_authorization can return new strings. I think the
following should fix the problem:

diff --git a/plugins/opp.c b/plugins/opp.c
index 644a2c6..fd78af4 100644
--- a/plugins/opp.c
+++ b/plugins/opp.c
@@ -142,8 +142,10 @@ static int opp_chkput(struct obex_session *os,
void *user_data)
name = g_strdup(obex_get_name(os));

skip_auth:
- if (name == NULL || strlen(name) == 0)
- return -EBADR;
+ if (name == NULL || strlen(name) == 0) {
+ ret = -EBADR;
+ goto failed;
+ }

if (g_strcmp0(name, obex_get_name(os)) != 0)
obex_set_name(os, name);
@@ -155,6 +157,8 @@ skip_auth:
ret = obex_put_stream_start(os, path);

g_free(path);
+
+failed:
g_free(folder);
g_free(name);


--
Luiz Augusto von Dentz