summaryrefslogtreecommitdiff
path: root/fetch-pack.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-11-02 23:19:13 (GMT)
committerJunio C Hamano <junkio@cox.net>2005-11-03 00:50:58 (GMT)
commit9534f40bc42dd826cc26c8c8c84f6a8a5fc569f6 (patch)
tree85db17a196526144838f60d848c9582c4e113d59 /fetch-pack.c
parent2fd955cc0b49de9e64b2f073ce76033975f0be24 (diff)
downloadgit-9534f40bc42dd826cc26c8c8c84f6a8a5fc569f6.zip
git-9534f40bc42dd826cc26c8c8c84f6a8a5fc569f6.tar.gz
git-9534f40bc42dd826cc26c8c8c84f6a8a5fc569f6.tar.bz2
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.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fetch-pack.c b/fetch-pack.c
index 3df9911..cb21715 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;