Re: [PATCH v7 1/4] sha1_file.c: support reading from a loose object of unknown type
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Apr 4, 2015, 19:34 UTC
- Message-ID
- <xmqq7ftrg02b.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <1428126162-18987-1-git-send-email-karthik.188@gmail.com>
Karthik Nayak <karthik.188@gmail.com> writes:
Show 9 quoted lines
> @@ -2586,13 +2649,15 @@ int sha1_object_info_extended(const unsigned char *sha1, struct object_info *oi, > *(oi->disk_sizep) = 0; > if (oi->delta_base_sha1) > hashclr(oi->delta_base_sha1); > + if (oi->typename) > + strbuf_addstr(oi->typename, typename(co->type)); > oi->whence = OI_CACHED; > return 0; > }
Just before the pre-context of this hunk, there is this bit:
if (oi->typep) *(oi->typep) = co->type;
which tells me that the callers of this function is allowed to pass a NULL in oi->typep when they are not interested in the type of the object.
Show 13 quoted lines
> if (!find_pack_entry(real, &e)) {
> /* Most likely it's a loose object. */
> - if (!sha1_loose_object_info(real, oi)) {
> + if (!sha1_loose_object_info(real, oi, flags)) {
> oi->whence = OI_LOOSE;
> return 0;
> }
> @@ -2616,6 +2681,8 @@ int sha1_object_info_extended(const unsigned char *sha1, struct object_info *oi,
> oi->u.packed.is_delta = (rtype == OBJ_REF_DELTA ||
> rtype == OBJ_OFS_DELTA);
> }
> + if (oi->typename)
> + strbuf_addstr(oi->typename, typename(*oi->typep));So, it makes me wonder what guarantee we have that this does not dereference a NULL here.