perf expr: Fix memory leaks in metric bison
Add a destructor for strings to reclaim memory in the event of errors. Free the ID given for a lookup, it was previously strdup-ed in the lex code. Signed-off-by: Ian Rogers <irogers@google.com> Reviewed-by: Andi Kleen <ak@linux.intel.com> Acked-by: Jiri Olsa <jolsa@redhat.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lore.kernel.org/lkml/20200513000318.15166-1-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
39548e50e6
commit
6365757894
|
@ -27,6 +27,7 @@
|
|||
%token EXPR_PARSE EXPR_OTHER EXPR_ERROR
|
||||
%token <num> NUMBER
|
||||
%token <str> ID
|
||||
%destructor { free ($$); } <str>
|
||||
%token MIN MAX IF ELSE SMT_ON
|
||||
%left MIN MAX IF
|
||||
%left '|'
|
||||
|
@ -94,8 +95,10 @@ if_expr:
|
|||
expr: NUMBER
|
||||
| ID { if (lookup_id(ctx, $1, &$$) < 0) {
|
||||
pr_debug("%s not found\n", $1);
|
||||
free($1);
|
||||
YYABORT;
|
||||
}
|
||||
free($1);
|
||||
}
|
||||
| expr '|' expr { $$ = (long)$1 | (long)$3; }
|
||||
| expr '&' expr { $$ = (long)$1 & (long)$3; }
|
||||
|
|
Loading…
Reference in New Issue