]> git.ipfire.org Git - thirdparty/git.git/commit - http-walker.c
http-walker: fix buffer underflow processing remote alternates
authorJeff King <peff@peff.net>
Mon, 13 Mar 2017 14:04:45 +0000 (10:04 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 Mar 2017 17:20:29 +0000 (10:20 -0700)
commitd61434ae813cc86a1a87d05cc61e36e87b0e20a9
tree83b452df8faf0dda505a231abe267a89de1a32d3
parente7e07d5a4fcc2a203d9873968ad3e6bd4d7419d7
http-walker: fix buffer underflow processing remote alternates

If we parse a remote alternates (or http-alternates), we
expect relative lines like:

  ../../foo.git/objects

which we convert into "$URL/../foo.git/" (and then use that
as a base for fetching more objects).

But if the remote feeds us nonsense like just:

  ../

we will try to blindly strip the last 7 characters, assuming
they contain the string "objects". Since we don't _have_ 7
characters at all, this results in feeding a small negative
value to strbuf_add(), which converts it to a size_t,
resulting in a big positive value. This should consistently
fail (since we can't generall allocate the max size_t minus
7 bytes), so there shouldn't be any security implications.

Let's fix this by using strbuf_strip_suffix() to drop the
characters we want. If they're not present, we'll ignore the
alternate (in theory we could use it as-is, but the rest of
the http-walker code unconditionally tacks "objects/" back
on, so it is it not prepared to handle such a case).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
http-walker.c