On Thu, Jul 16, 2020 at 12:29:06PM -0300, Arnaldo Carvalho de Melo wrote:
> Em Sun, Jul 12, 2020 at 03:26:19PM +0200, Jiri Olsa escreveu:
> > Adding expr__add_id function to data for ID
> > with zero value, which is used when scanning
> > the expression for IDs.
> > 
> > Acked-by: Ian Rogers <[email protected]>
> > Signed-off-by: Jiri Olsa <[email protected]>
> > ---
> >  tools/perf/util/expr.c | 29 +++++++++++++++++++++++------
> >  tools/perf/util/expr.h |  1 +
> >  tools/perf/util/expr.y |  2 +-
> >  3 files changed, 25 insertions(+), 7 deletions(-)
> > 
> > diff --git a/tools/perf/util/expr.c b/tools/perf/util/expr.c
> > index 5d05f9765ed8..4b8953605aed 100644
> > --- a/tools/perf/util/expr.c
> > +++ b/tools/perf/util/expr.c
> > @@ -32,6 +32,24 @@ static bool key_equal(const void *key1, const void *key2,
> >     return !strcmp((const char *)key1, (const char *)key2);
> >  }
> >  
> > +/* Caller must make sure id is allocated */
> > +int expr__add_id(struct expr_parse_ctx *ctx, const char *id)
> > +{
> > +   struct expr_id_data *data_ptr = NULL, *old_data = NULL;
> > +   char *old_key = NULL;
> > +   int ret;
> > +
> > +   data_ptr = malloc(sizeof(*data_ptr));
> > +   if (!data_ptr)
> > +           return -ENOMEM;
> > +
> > +   ret = hashmap__set(&ctx->ids, id, data_ptr,
> > +                      (const void **)&old_key, (void **)&old_data);
> > +   free(old_key);
> > +   free(old_data);
> 
> Hey, if hashmap__set() fails then we leak data_ptr?

right, good catch, will fix

thanks,
jirka

Reply via email to