From: Junio C Hamano Date: Tue, 21 Mar 2017 22:03:25 +0000 (-0700) Subject: Merge branch 'jk/http-walker-buffer-underflow-fix' into maint X-Git-Tag: v2.12.2~22 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/36238fc4a59ae03e5574510dec3751745f98e940?hp=1a61be2a525e1a9285d922907c5b3a7ef8ecf17b Merge branch 'jk/http-walker-buffer-underflow-fix' into maint "Dumb http" transport used to misparse a nonsense http-alternates response, which has been fixed. * jk/http-walker-buffer-underflow-fix: http-walker: fix buffer underflow processing remote alternates --- diff --git a/http-walker.c b/http-walker.c index b34b6ace7c..507c200f00 100644 --- a/http-walker.c +++ b/http-walker.c @@ -296,13 +296,16 @@ static void process_alternates_response(void *callback_data) okay = 1; } } - /* skip "objects\n" at end */ if (okay) { struct strbuf target = STRBUF_INIT; strbuf_add(&target, base, serverlen); - strbuf_add(&target, data + i, posn - i - 7); - - if (is_alternate_allowed(target.buf)) { + strbuf_add(&target, data + i, posn - i); + if (!strbuf_strip_suffix(&target, "objects")) { + warning("ignoring alternate that does" + " not end in 'objects': %s", + target.buf); + strbuf_release(&target); + } else if (is_alternate_allowed(target.buf)) { warning("adding alternate object store: %s", target.buf); newalt = xmalloc(sizeof(*newalt));