Subject: Re: [PATCH v7 1/4] sha1_file.c: support reading from a loose object of unknown type

From: Junio C Hamano <[email-masked]>
Date: Sat, 04 Apr 2015 12:34:04 -0700

Karthik Nayak <[email-masked]> writes:

> @@ -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.

>  	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.