ui-refs.c: avoid segfault on unparsed ref objects

When a ref refers to something other then a commit or tag object, cgit
could segfault when trying to display the tag info.

Noticed-by: Eugene Sajine <euguess@gmail.com>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
Lars Hjemli 2010-08-03 22:06:21 +02:00
parent 73ac0fb6f2
commit 3687be20bc

View File

@ -42,23 +42,25 @@ static int cmp_branch_age(const void *a, const void *b)
return cmp_age(r1->commit->committer_date, r2->commit->committer_date); return cmp_age(r1->commit->committer_date, r2->commit->committer_date);
} }
static int get_ref_age(struct refinfo *ref)
{
if (!ref->object)
return 0;
switch (ref->object->type) {
case OBJ_TAG:
return ref->tag ? ref->tag->tagger_date : 0;
case OBJ_COMMIT:
return ref->commit ? ref->commit->committer_date : 0;
}
return 0;
}
static int cmp_tag_age(const void *a, const void *b) static int cmp_tag_age(const void *a, const void *b)
{ {
struct refinfo *r1 = *(struct refinfo **)a; struct refinfo *r1 = *(struct refinfo **)a;
struct refinfo *r2 = *(struct refinfo **)b; struct refinfo *r2 = *(struct refinfo **)b;
int r1date, r2date;
if (r1->object->type != OBJ_COMMIT) return cmp_age(get_ref_age(r1), get_ref_age(r2));
r1date = r1->tag->tagger_date;
else
r1date = r1->commit->committer_date;
if (r2->object->type != OBJ_COMMIT)
r2date = r2->tag->tagger_date;
else
r2date = r2->commit->committer_date;
return cmp_age(r1date, r2date);
} }
static int print_branch(struct refinfo *ref) static int print_branch(struct refinfo *ref)