From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Masami Hiramatsu <mhiramat@kernel.org>
Cc: linux-kernel@vger.kernel.org, Namhyung Kim <namhyung@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>
Subject: Re: [PATCH perf/core v2 4/8] perf: Make alias handler to check return value of strbuf
Date: Thu, 5 May 2016 20:53:40 -0300 [thread overview]
Message-ID: <20160505235340.GO11069@kernel.org> (raw)
In-Reply-To: <20160429151023.30063.33138.stgit@devbox>
Em Sat, Apr 30, 2016 at 12:10:23AM +0900, Masami Hiramatsu escreveu:
> Make alias handler and sq_quote_argv to check the return
> value of strbuf APIs.
> In sq_quote_argv() calls die(), but this fix handles strbuf
> failure as a special case and returns to caller, since
> the caller - handle_alias() also has to check the return
> value of other strbuf APIs and those checks can be merged
> to one if() statement.
Fair enough, looks ok.
> Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
> ---
> tools/perf/perf.c | 8 +++++---
> tools/perf/util/quote.c | 36 ++++++++++++++++++++----------------
> tools/perf/util/quote.h | 2 +-
> 3 files changed, 26 insertions(+), 20 deletions(-)
>
> diff --git a/tools/perf/perf.c b/tools/perf/perf.c
> index 83ffe7c..7970008 100644
> --- a/tools/perf/perf.c
> +++ b/tools/perf/perf.c
> @@ -309,9 +309,11 @@ static int handle_alias(int *argcp, const char ***argv)
> if (*argcp > 1) {
> struct strbuf buf;
>
> - strbuf_init(&buf, PATH_MAX);
> - strbuf_addstr(&buf, alias_string);
> - sq_quote_argv(&buf, (*argv) + 1, PATH_MAX);
> + if (strbuf_init(&buf, PATH_MAX) < 0 ||
> + strbuf_addstr(&buf, alias_string) < 0 ||
> + sq_quote_argv(&buf, (*argv) + 1,
> + PATH_MAX) < 0)
> + die("Failed to allocate memory.");
> free(alias_string);
> alias_string = buf.buf;
> }
> diff --git a/tools/perf/util/quote.c b/tools/perf/util/quote.c
> index 01f0324..c6d4ee2 100644
> --- a/tools/perf/util/quote.c
> +++ b/tools/perf/util/quote.c
> @@ -17,38 +17,42 @@ static inline int need_bs_quote(char c)
> return (c == '\'' || c == '!');
> }
>
> -static void sq_quote_buf(struct strbuf *dst, const char *src)
> +static int sq_quote_buf(struct strbuf *dst, const char *src)
> {
> char *to_free = NULL;
> + int ret;
>
> if (dst->buf == src)
> to_free = strbuf_detach(dst, NULL);
>
> - strbuf_addch(dst, '\'');
> - while (*src) {
> + ret = strbuf_addch(dst, '\'');
> + while (!ret && *src) {
> size_t len = strcspn(src, "'!");
> - strbuf_add(dst, src, len);
> + ret = strbuf_add(dst, src, len);
> src += len;
> - while (need_bs_quote(*src)) {
> - strbuf_addstr(dst, "'\\");
> - strbuf_addch(dst, *src++);
> - strbuf_addch(dst, '\'');
> - }
> + while (!ret && need_bs_quote(*src))
> + ret = strbuf_addf(dst, "'\\%c\'", *src++);
> }
> - strbuf_addch(dst, '\'');
> + if (!ret)
> + ret = strbuf_addch(dst, '\'');
> free(to_free);
> +
> + return ret;
> }
>
> -void sq_quote_argv(struct strbuf *dst, const char** argv, size_t maxlen)
> +int sq_quote_argv(struct strbuf *dst, const char** argv, size_t maxlen)
> {
> - int i;
> + int i, ret;
>
> /* Copy into destination buffer. */
> - strbuf_grow(dst, 255);
> - for (i = 0; argv[i]; ++i) {
> - strbuf_addch(dst, ' ');
> - sq_quote_buf(dst, argv[i]);
> + ret = strbuf_grow(dst, 255);
> + for (i = 0; !ret && argv[i]; ++i) {
> + ret = strbuf_addch(dst, ' ');
> + if (ret)
> + break;
> + ret = sq_quote_buf(dst, argv[i]);
> if (maxlen && dst->len > maxlen)
> die("Too many or long arguments");
> }
> + return ret;
> }
> diff --git a/tools/perf/util/quote.h b/tools/perf/util/quote.h
> index 3340c9c..e1ec191 100644
> --- a/tools/perf/util/quote.h
> +++ b/tools/perf/util/quote.h
> @@ -24,6 +24,6 @@
> * sq_quote() in a real application.
> */
>
> -void sq_quote_argv(struct strbuf *, const char **argv, size_t maxlen);
> +int sq_quote_argv(struct strbuf *, const char **argv, size_t maxlen);
>
> #endif /* __PERF_QUOTE_H */
next prev parent reply other threads:[~2016-05-05 23:53 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-29 15:09 [PATCH perf/core v2 0/8] perf tools: Update strbuf to remove xrealloc Masami Hiramatsu
2016-04-29 15:09 ` [PATCH perf/core v2 1/8] perf: Rewrite strbuf not to die Masami Hiramatsu
2016-05-05 23:25 ` Arnaldo Carvalho de Melo
2016-05-05 23:49 ` Arnaldo Carvalho de Melo
2016-05-10 1:00 ` Masami Hiramatsu
2016-04-29 15:10 ` [PATCH perf/core v2 2/8] perf probe: Check the return value of strbuf APIs Masami Hiramatsu
2016-05-05 23:46 ` Arnaldo Carvalho de Melo
2016-05-10 2:37 ` Masami Hiramatsu
2016-04-29 15:10 ` [PATCH perf/core v2 3/8] perf help: Make check_emacsclient_version to check " Masami Hiramatsu
2016-05-05 23:51 ` Arnaldo Carvalho de Melo
2016-04-29 15:10 ` [PATCH perf/core v2 4/8] perf: Make alias handler to check return value of strbuf Masami Hiramatsu
2016-05-05 23:53 ` Arnaldo Carvalho de Melo [this message]
2016-04-29 15:10 ` [PATCH perf/core v2 5/8] perf header: Make topology checkers " Masami Hiramatsu
2016-05-05 23:55 ` Arnaldo Carvalho de Melo
2016-05-10 2:58 ` Masami Hiramatsu
2016-04-29 15:10 ` [PATCH perf/core v2 6/8] perf pmu: Make pmu_formats_string " Masami Hiramatsu
2016-05-05 23:56 ` Arnaldo Carvalho de Melo
2016-04-29 15:10 ` [PATCH perf/core v2 7/8] perf help: Do not use ALLOC_GROW in add_cmd_list Masami Hiramatsu
2016-05-05 23:58 ` Arnaldo Carvalho de Melo
2016-04-29 15:11 ` [PATCH perf/core v2 8/8] perf tools: Remove xrealloc and ALLOC_GROW Masami Hiramatsu
2016-05-05 23:58 ` Arnaldo Carvalho de Melo
2016-04-29 15:14 ` [PATCH perf/core v2 0/8] perf tools: Update strbuf to remove xrealloc Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160505235340.GO11069@kernel.org \
--to=acme@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox