From: Junio C Hamano Date: Fri, 5 Jan 2018 21:28:10 +0000 (-0800) Subject: Merge branch 'jd/fix-strbuf-add-urlencode-bytes' X-Git-Tag: v2.16.0-rc1~6 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/a741e2825b3a3045254f404696c0051714c0e7c3?ds=inline;hp=-c Merge branch 'jd/fix-strbuf-add-urlencode-bytes' Bytes with high-bit set were encoded incorrectly and made credential helper fail. * jd/fix-strbuf-add-urlencode-bytes: strbuf: fix urlencode format string on signed char --- a741e2825b3a3045254f404696c0051714c0e7c3 diff --combined strbuf.c index 8007be8fba,4d5a9ce551..1df674e919 --- a/strbuf.c +++ b/strbuf.c @@@ -11,28 -11,6 +11,28 @@@ int starts_with(const char *str, const return 0; } +int skip_to_optional_arg_default(const char *str, const char *prefix, + const char **arg, const char *def) +{ + const char *p; + + if (!skip_prefix(str, prefix, &p)) + return 0; + + if (!*p) { + if (arg) + *arg = def; + return 1; + } + + if (*p != '=') + return 0; + + if (arg) + *arg = p + 1; + return 1; +} + /* * Used as the default ->buf value, so that people can always assume * buf is non NULL and ->buf is NUL terminated even for a freshly @@@ -408,15 -386,12 +408,15 @@@ ssize_t strbuf_read(struct strbuf *sb, ssize_t strbuf_read_once(struct strbuf *sb, int fd, size_t hint) { + size_t oldalloc = sb->alloc; ssize_t cnt; strbuf_grow(sb, hint ? hint : 8192); cnt = xread(fd, sb->buf + sb->len, sb->alloc - sb->len - 1); if (cnt > 0) strbuf_setlen(sb, sb->len + cnt); + else if (oldalloc == 0) + strbuf_release(sb); return cnt; } @@@ -683,7 -658,7 +683,7 @@@ static void strbuf_add_urlencode(struc (!reserved && is_rfc3986_reserved(ch))) strbuf_addch(sb, ch); else - strbuf_addf(sb, "%%%02x", ch); + strbuf_addf(sb, "%%%02x", (unsigned char)ch); } }