Be careful when dereferencing tags.

One caller of deref_tag() was not careful enough to make sure
what deref_tag() returned was not NULL (i.e. we found a tag
object that points at an object we do not have).  Fix it, and
warn about refs that point at such an incomplete tag where
needed.

Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Junio C Hamano
2005-11-02 15:19:13 -08:00
parent 2fd955cc0b
commit 9534f40bc4
9 changed files with 21 additions and 14 deletions

View File

@ -38,9 +38,9 @@ static void rev_list_push(struct commit *commit, int mark)
static int rev_list_insert_ref(const char *path, const unsigned char *sha1)
{
struct object *o = deref_tag(parse_object(sha1));
struct object *o = deref_tag(parse_object(sha1), path, 0);
if (o->type == commit_type)
if (o && o->type == commit_type)
rev_list_push((struct commit *)o, SEEN);
return 0;
@ -317,7 +317,8 @@ static int everything_local(struct ref **refs, int nr_match, char **match)
* Don't mark them common yet; the server has to be told so first.
*/
for (ref = *refs; ref; ref = ref->next) {
struct object *o = deref_tag(lookup_object(ref->old_sha1));
struct object *o = deref_tag(lookup_object(ref->old_sha1),
NULL, 0);
if (!o || o->type != commit_type || !(o->flags & COMPLETE))
continue;