From: Mathieu Desnoyers Date: Tue, 16 Oct 2012 22:37:00 +0000 (-0400) Subject: babeltrace: fix poptGetOptArg memleak X-Git-Tag: v1.0.0-rc6~7 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=9f2c779c273ae143ec00fb789b9a26ebecad173d;hp=95febab3a71bc0d64d9ebd0ce08787d96a51d475 babeltrace: fix poptGetOptArg memleak Signed-off-by: Mathieu Desnoyers --- diff --git a/converter/babeltrace.c b/converter/babeltrace.c index 099a9fa6..f590abdf 100644 --- a/converter/babeltrace.c +++ b/converter/babeltrace.c @@ -151,6 +151,7 @@ static void usage(FILE *fp) static int get_names_args(poptContext *pc) { char *str, *strlist, *strctx; + int ret = 0; opt_payload_field_names = 0; opt_context_field_names = 0; @@ -178,15 +179,20 @@ static int get_names_args(poptContext *pc) opt_payload_field_names = 0; } else { fprintf(stderr, "[error] unknown field name type %s\n", str); - return -EINVAL; + free(strlist); + ret = -EINVAL; + goto end; } } while ((str = strtok_r(NULL, ",", &strctx))); - return 0; +end: + free(strlist); + return ret; } static int get_fields_args(poptContext *pc) { char *str, *strlist, *strctx; + int ret = 0; strlist = (char *) poptGetOptArg(*pc); if (!strlist) { @@ -215,10 +221,13 @@ static int get_fields_args(poptContext *pc) opt_callsite_field = 1; else { fprintf(stderr, "[error] unknown field type %s\n", str); - return -EINVAL; + ret = -EINVAL; + goto end; } } while ((str = strtok_r(NULL, ",", &strctx))); - return 0; +end: + free(strlist); + return ret; } /* @@ -279,10 +288,10 @@ static int parse_options(int argc, char **argv) break; case OPT_CLOCK_OFFSET: { - const char *str; + char *str; char *endptr; - str = poptGetOptArg(pc); + str = (char *) poptGetOptArg(pc); if (!str) { fprintf(stderr, "[error] Missing --clock-offset argument\n"); ret = -EINVAL; @@ -293,8 +302,10 @@ static int parse_options(int argc, char **argv) if (*endptr != '\0' || str == endptr || errno != 0) { fprintf(stderr, "[error] Incorrect --clock-offset argument: %s\n", str); ret = -EINVAL; + free(str); goto end; } + free(str); break; } case OPT_CLOCK_SECONDS: