Re: [PATCH v8 1/4] sha1_file.c: support reading from a loose object of unknown type
- From
karthik nayak <karthik.188@gmail.com>
- Date
- Apr 21, 2015, 11:26 UTC
- Message-ID
- <553633D0.9020804@gmail.com>
- In-Reply-To
- <20150420185122.GA13718@peff.net>
On 04/21/2015 12:21 AM, Jeff King wrote:
Show 21 quoted lines
> On Tue, Apr 21, 2015 at 12:13:30AM +0530, karthik nayak wrote:
>
>> +static int unpack_sha1_header_to_strbuf(git_zstream *stream, unsigned char
>> *map,
>> + unsigned long mapsize, void *buffer,
>> + unsigned long bufsiz, struct strbuf
>> *header)
>> +{
>> + unsigned char *cp;
>> + int status;
>> + int i = 0;
>> +
>> + status = unpack_sha1_header(stream, map, mapsize, buffer, bufsiz);
>
> I wonder if we would feel comfortable just running this NUL-check as
> part of unpack_sha1_header (i.e., in all code paths). It _shouldn't_
> trigger in normal use, but I wonder if there would be any downsides
> (e.g., maliciously crafted objects getting us to allocate memory or
> something; I think it is fairly easy to convince git to allocate memory,
> though).
>But why would we want it to be a part of unpack_sha1_header?
Show 12 quoted lines
>> + for (cp = buffer; cp < stream->next_out; cp++)
>> + if (!*cp) {
>> + /* Found the NUL at the end of the header */
>> + return 0;
>> + }
>
> I think we can spell this as:
>
> if (memchr(buffer, '\0', stream->next_out - buffer))
> return 0;
>
> which is shorter and possibly more efficient.Noted. Thanks :)
Show 7 quoted lines
> > In theory we could also just start trying to parse the type/size header, > and notice there when we don't find the NUL. That's probably not worth > doing, though. The parsing is separated from the unpacking here, so it > would require combining those two operations in a single function. And > the extra NUL search here is likely not very expensive. >
Yes, even I though about doing that, but wasn't keen on combining those two functions, they're meant to do two different things.
> -Peff >