perf pmu: Make pmu_formats_string to check return value of strbuf
authorMasami Hiramatsu <mhiramat@kernel.org>
Tue, 10 May 2016 05:47:44 +0000 (14:47 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 10 May 2016 14:57:52 +0000 (11:57 -0300)
Make pmu_formats_string() to check return value of strbuf APIs so that
it can detect errors in it.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20160510054744.6158.37810.stgit@devbox
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/pmu.c

index bf34468a99cbca4f0891827578ed7df831d0e9ef..ddb0261b2577a2caf5fb532f7c343bd17cb9c972 100644 (file)
@@ -643,20 +643,20 @@ static int pmu_resolve_param_term(struct parse_events_term *term,
 static char *pmu_formats_string(struct list_head *formats)
 {
        struct perf_pmu_format *format;
-       char *str;
-       struct strbuf buf;
+       char *str = NULL;
+       struct strbuf buf = STRBUF_INIT;
        unsigned i = 0;
 
        if (!formats)
                return NULL;
 
-       strbuf_init(&buf, 0);
        /* sysfs exported terms */
        list_for_each_entry(format, formats, list)
-               strbuf_addf(&buf, i++ ? ",%s" : "%s",
-                           format->name);
+               if (strbuf_addf(&buf, i++ ? ",%s" : "%s", format->name) < 0)
+                       goto error;
 
        str = strbuf_detach(&buf, NULL);
+error:
        strbuf_release(&buf);
 
        return str;