summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2017-03-21 15:03:25 -0700
committerJunio C Hamano <gitster@pobox.com>2017-03-21 15:03:25 -0700
commit36238fc4a59ae03e5574510dec3751745f98e940 (patch)
tree6af7e8a0fceb89a9f8a155bf4ce57129def05f0d
parent1a61be2a525e1a9285d922907c5b3a7ef8ecf17b (diff)
parentd61434ae813cc86a1a87d05cc61e36e87b0e20a9 (diff)
downloadgit-36238fc4a59ae03e5574510dec3751745f98e940.tar.gz
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
-rw-r--r--http-walker.c11
1 files changed, 7 insertions, 4 deletions
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));