use get_tagged_oid()
Avoid derefencing ->tagged without checking for NULL by using the convenience wrapper for getting the ID of the tagged object. It die()s when encountering a broken tag instead of segfaulting. Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
dad3f0607b
commit
c77722b3ea
@ -313,7 +313,7 @@ static void describe_commit(struct object_id *oid, struct strbuf *dst)
|
|||||||
*/
|
*/
|
||||||
append_name(n, dst);
|
append_name(n, dst);
|
||||||
if (longformat)
|
if (longformat)
|
||||||
append_suffix(0, n->tag ? &n->tag->tagged->oid : oid, dst);
|
append_suffix(0, n->tag ? get_tagged_oid(n->tag) : oid, dst);
|
||||||
if (suffix)
|
if (suffix)
|
||||||
strbuf_addstr(dst, suffix);
|
strbuf_addstr(dst, suffix);
|
||||||
return;
|
return;
|
||||||
|
@ -627,6 +627,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
|
|||||||
break;
|
break;
|
||||||
case OBJ_TAG: {
|
case OBJ_TAG: {
|
||||||
struct tag *t = (struct tag *)o;
|
struct tag *t = (struct tag *)o;
|
||||||
|
struct object_id *oid = get_tagged_oid(t);
|
||||||
|
|
||||||
if (rev.shown_one)
|
if (rev.shown_one)
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
@ -638,10 +639,10 @@ int cmd_show(int argc, const char **argv, const char *prefix)
|
|||||||
rev.shown_one = 1;
|
rev.shown_one = 1;
|
||||||
if (ret)
|
if (ret)
|
||||||
break;
|
break;
|
||||||
o = parse_object(the_repository, &t->tagged->oid);
|
o = parse_object(the_repository, oid);
|
||||||
if (!o)
|
if (!o)
|
||||||
ret = error(_("could not read object %s"),
|
ret = error(_("could not read object %s"),
|
||||||
oid_to_hex(&t->tagged->oid));
|
oid_to_hex(oid));
|
||||||
objects[i].item = o;
|
objects[i].item = o;
|
||||||
i--;
|
i--;
|
||||||
break;
|
break;
|
||||||
|
@ -421,7 +421,7 @@ static int check_one_mergetag(struct commit *commit,
|
|||||||
if (get_oid(mergetag_data->argv[i], &oid) < 0)
|
if (get_oid(mergetag_data->argv[i], &oid) < 0)
|
||||||
return error(_("not a valid object name: '%s'"),
|
return error(_("not a valid object name: '%s'"),
|
||||||
mergetag_data->argv[i]);
|
mergetag_data->argv[i]);
|
||||||
if (oideq(&tag->tagged->oid, &oid))
|
if (oideq(get_tagged_oid(tag), &oid))
|
||||||
return 0; /* found */
|
return 0; /* found */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2139,7 +2139,7 @@ static int add_promisor_object(const struct object_id *oid,
|
|||||||
oidset_insert(set, &parents->item->object.oid);
|
oidset_insert(set, &parents->item->object.oid);
|
||||||
} else if (obj->type == OBJ_TAG) {
|
} else if (obj->type == OBJ_TAG) {
|
||||||
struct tag *tag = (struct tag *) obj;
|
struct tag *tag = (struct tag *) obj;
|
||||||
oidset_insert(set, &tag->tagged->oid);
|
oidset_insert(set, get_tagged_oid(tag));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1766,7 +1766,7 @@ static int populate_value(struct ref_array_item *ref, struct strbuf *err)
|
|||||||
* If it is a tag object, see if we use a value that derefs
|
* If it is a tag object, see if we use a value that derefs
|
||||||
* the object, and if we do grab the object it refers to.
|
* the object, and if we do grab the object it refers to.
|
||||||
*/
|
*/
|
||||||
oi_deref.oid = ((struct tag *)obj)->tagged->oid;
|
oi_deref.oid = *get_tagged_oid((struct tag *)obj);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NEEDSWORK: This derefs tag only once, which
|
* NEEDSWORK: This derefs tag only once, which
|
||||||
@ -1997,7 +1997,7 @@ static const struct object_id *match_points_at(struct oid_array *points_at,
|
|||||||
if (!obj)
|
if (!obj)
|
||||||
die(_("malformed object at '%s'"), refname);
|
die(_("malformed object at '%s'"), refname);
|
||||||
if (obj->type == OBJ_TAG)
|
if (obj->type == OBJ_TAG)
|
||||||
tagged_oid = &((struct tag *)obj)->tagged->oid;
|
tagged_oid = get_tagged_oid((struct tag *)obj);
|
||||||
if (tagged_oid && oid_array_lookup(points_at, tagged_oid) >= 0)
|
if (tagged_oid && oid_array_lookup(points_at, tagged_oid) >= 0)
|
||||||
return tagged_oid;
|
return tagged_oid;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user