diff options
author | Junio C Hamano <junkio@cox.net> | 2005-11-02 15:19:13 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-11-02 16:50:58 -0800 |
commit | 9534f40bc42dd826cc26c8c8c84f6a8a5fc569f6 (patch) | |
tree | 85db17a196526144838f60d848c9582c4e113d59 /fetch-pack.c | |
parent | 2fd955cc0b49de9e64b2f073ce76033975f0be24 (diff) | |
download | git-9534f40bc42dd826cc26c8c8c84f6a8a5fc569f6.tar.gz |
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>
Diffstat (limited to 'fetch-pack.c')
-rw-r--r-- | fetch-pack.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/fetch-pack.c b/fetch-pack.c index 3df991100b..cb2171523c 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -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; |