tools lib traceevent: Free field if an error occurs on process_fields
authorNamhyung Kim <namhyung.kim@lge.com>
Wed, 19 Sep 2012 06:58:43 +0000 (15:58 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 24 Sep 2012 15:02:38 +0000 (12:02 -0300)
The field should be freed on error paths.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/1348037924-17568-4-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/lib/traceevent/event-parse.c

index 27088c55af1bbc03ed1b6ebaac1d0fd3ef7dc21b..a776ed5cd2b487ffbbb0148667e84ef55501a273 100644 (file)
@@ -2186,10 +2186,10 @@ process_fields(struct event_format *event, struct print_flag_sym **list, char **
 
                value = arg_eval(arg);
                if (value == NULL)
-                       goto out_free;
+                       goto out_free_field;
                field->value = strdup(value);
                if (field->value == NULL)
-                       goto out_free;
+                       goto out_free_field;
 
                free_arg(arg);
                arg = alloc_arg();
@@ -2197,14 +2197,14 @@ process_fields(struct event_format *event, struct print_flag_sym **list, char **
                free_token(token);
                type = process_arg(event, arg, &token);
                if (test_type_token(type, token, EVENT_OP, "}"))
-                       goto out_free;
+                       goto out_free_field;
 
                value = arg_eval(arg);
                if (value == NULL)
-                       goto out_free;
+                       goto out_free_field;
                field->str = strdup(value);
                if (field->str == NULL)
-                       goto out_free;
+                       goto out_free_field;
                free_arg(arg);
                arg = NULL;
 
@@ -2218,6 +2218,8 @@ process_fields(struct event_format *event, struct print_flag_sym **list, char **
        *tok = token;
        return type;
 
+out_free_field:
+       free_flag_sym(field);
 out_free:
        free_arg(arg);
        free_token(token);