Re: [PATCH v8 18/19] branch: use ref-filter printing APIs
From: Jeff King <hidden>
Date: 2016-12-09 14:03:52
On Wed, Dec 07, 2016 at 09:06:26PM +0530, Karthik Nayak wrote:
+const char *quote_literal_for_format(const char *s)
{
+ struct strbuf buf = STRBUF_INIT;
+ strbuf_reset(&buf);
+ while (*s) {
+ const char *ep = strchrnul(s, '%');
+ if (s < ep)
+ strbuf_add(&buf, s, ep - s);
+ if (*ep == '%') {
+ strbuf_addstr(&buf, "%%");
+ s = ep + 1;
+ } else {
+ s = ep;
+ }
}
+ return buf.buf;
}You should use strbuf_detach() to return the buffer from a strbuf. Otherwise it is undefined whether the pointer is allocated or not (and whether it needs to be freed). In this case, if "s" is empty, buf.buf would point to a string literal, but otherwise to allocated memory. strbuf_detach() normalizes that. But...
+ branch_get_color(BRANCH_COLOR_REMOTE), maxwidth, quote_literal_for_format(remote_prefix),
This caller never stores the return value, and it ends up leaking. So I wonder if you wanted "static struct strbuf" in the first place (and that would explain the strbuf_reset() in your function). -Peff