lkml.org 
[lkml]   [2012]   [Sep]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v2] A trivial memory leak fix while calling system_path
Em Fri, Sep 07, 2012 at 03:26:00PM +0900, Namhyung Kim escreveu:
> On Fri, 7 Sep 2012 11:34:49 +0800, liang xie wrote:
> > + const char *exec_path = perf_exec_path();
> >
> > - add_path(&new_path, perf_exec_path());
> > + add_path(&new_path, exec_path);
> > add_path(&new_path, argv0_path);
> >
> > if (old_path)
> > @@ -95,6 +96,7 @@ void setup_path(void)
> > setenv("PATH", new_path.buf, 1);
> >
> > strbuf_release(&new_path);
> > + free((void *)exec_path);
> > }
>
> The problem is that perf_exec_path() can return a non-dynamically
> allocated string (e.g. command line argument or environment string) and
> currently we cannot know where the returned string is came from.

And that is just gross, ugh. Make it always return dynamically allocated
string, not const, drop the cast on free and be done with it :-)

- Arnaldo

> It might cause much more troubles when you free that kind of string than
> just leaking a couple of bytes IMHO.
>
> Thanks,
> Namhyung
>
> >
> > static const char **prepare_perf_cmd(const char **argv)
> > diff --git a/tools/perf/util/help.c b/tools/perf/util/help.c
> > index 6f2975a..798f66d 100644
> > --- a/tools/perf/util/help.c
> > +++ b/tools/perf/util/help.c
> > @@ -187,6 +187,7 @@ void load_command_list(const char *prefix,
> > uniq(other_cmds);
> > }
> > exclude_cmds(other_cmds, main_cmds);
> > + free((void *)exec_path);
> > }
> >
> > void list_commands(const char *title, struct cmdnames *main_cmds,


\
 
 \ /
  Last update: 2012-09-07 18:41    [W:7.609 / U:0.292 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site