From: Jeff King <peff@peff.net>
To: Romain Francoise <romain@orebokech.com>
Cc: git@vger.kernel.org, gitster@pobox.com
Subject: Re: [PATCH] mailmap: avoid out-of-bounds memory access
Date: Sun, 28 Oct 2012 07:02:07 -0400 [thread overview]
Message-ID: <20121028110207.GA11434@sigill.intra.peff.net> (raw)
In-Reply-To: <87k3ub4jjg.fsf@silenus.orebokech.com>
On Sun, Oct 28, 2012 at 12:49:55AM +0200, Romain Francoise wrote:
> AddressSanitizer (http://clang.llvm.org/docs/AddressSanitizer.html)
> complains of a one-byte buffer underflow in parse_name_and_email() while
> running the test suite. And indeed, if one of the lines in the mailmap
> begins with '<', we dereference the address just before the beginning of
> the buffer when looking for whitespace to remove, before checking that
> we aren't going too far.
>
> So reverse the order of the tests to make sure that we don't read
> outside the buffer.
Thanks, I think your fix is correct.
> diff --git a/mailmap.c b/mailmap.c
> index 47aa419..ea4b471 100644
> --- a/mailmap.c
> +++ b/mailmap.c
> @@ -118,7 +118,7 @@ static char *parse_name_and_email(char *buffer, char **name,
> while (isspace(*nstart) && nstart < left)
> ++nstart;
> nend = left-1;
> - while (isspace(*nend) && nend > nstart)
> + while (nend > nstart && isspace(*nend))
> --nend;
The fix confused me for a moment, because the problem is not actually in
the loop condition itself; working backwards from "nend > nstart", we
will at worst dereference nstart unnecessarily. The real problem is in
the "nend = left-1" above, which sets the loop precondition outside the
string to be examined.
So you could also check for "left == nstart" before the loop even
begins. I think your fix (to just make the loop more robust to that
precondition) is better, though, as the rest of the code does the right
thing with such a value of nend.
It looks like t4203 triggers this problem. Curious that valgrind does
not find it. I guess since it does not have compiler support, it cannot
find out-of-bound errors on stack buffers. Does the rest of the test
suite turn up clean with AddressSanitizer?
-Peff
next prev parent reply other threads:[~2012-10-28 11:02 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-27 22:49 [PATCH] mailmap: avoid out-of-bounds memory access Romain Francoise
2012-10-28 11:02 ` Jeff King [this message]
2012-10-28 13:21 ` Romain Francoise
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20121028110207.GA11434@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=romain@orebokech.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).