On Sat, Sep 28, 2013 at 4:34 AM, Jeff King <peff@xxxxxxxx> wrote: > diff --git a/http.c b/http.c > index 65a0048..8775b5c 100644 > --- a/http.c > +++ b/http.c > @@ -921,11 +921,71 @@ static int http_request_reauth(const char *url, > +static int update_url_from_redirect(struct strbuf *base, > + const char *asked, > + const struct strbuf *got) > +{ > + const char *tail; > + size_t tail_len; > + > + if (!strcmp(asked, got->buf)) > + return 0; > + > + if (strncmp(asked, base->buf, base->len)) > + die("BUG: update_url_from_redirect: %s is not a superset of %s", > + asked, base->buf); Is there something non-obvious going on here? die(...,base->buf) takes advantage of the terminating NUL promised by strbuf, but then strncmp(...,base->buf,base->len) is used rather than the simpler strcmp(...,base->buf). > + tail = asked + base->len; > + tail_len = strlen(tail); > + > + if (got->len < tail_len || > + strcmp(tail, got->buf + got->len - tail_len)) > + return 0; /* insane redirect scheme */ > + > + strbuf_reset(base); > + strbuf_add(base, got->buf, got->len - tail_len); > + return 1; > +} -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html