[+cc Duy as the master of all things untracked-cache]
On Fri, Apr 12, 2019 at 10:48:30AM +0900, Junio C Hamano wrote:
> > The right thing is probably something like:
> >
> > eos = memchr(data, '\0', end - data);
> > if (!eos)
> > return error("malformed untracked cache extension");
> > len = eos - data;
> >
> > I wouldn't be at all surprised if other bits of the index code have the
> > same issue, though. And at any rate, thinking about that should
> > definitely not hold up your fix.
>
> True, true. I wonder if folks intereseted in libFuzzer can chime in
> with something useful here, but that is totally independent.
Just so we don't forget about it, I wrote this fix up as a patch. And in
fact it led to a few other cleanups. I think the first one is definitely
worth doing now, even if there are other similar cases lurking in the
rest of the index code.
The other two are optional, though I think they are worth it (and not
too hard to verify that they are doing the right thing).
These are on top of js/untracked-cache-allocfix (though they could
easily be ported to a separate topic if we want).
[1/3]: untracked-cache: be defensive about missing NULs in index
[2/3]: untracked-cache: simplify parsing by dropping "next"
[3/3]: untracked-cache: simplify parsing by dropping "len"
dir.c | 41 ++++++++++++++++++-----------------------
1 file changed, 18 insertions(+), 23 deletions(-)
-Peff