aboutsummaryrefslogtreecommitdiff
path: root/object.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2013-03-17 04:22:36 -0400
committerJunio C Hamano <gitster@pobox.com>2013-03-17 12:49:03 -0700
commit75a95490474ab6e991cbbbd10d980498a9109648 (patch)
tree5acd800ccaad1c37aff8049fe4fb808314cbdaca /object.c
parent7e2010537e96d0a1144520222f20ba1dc3d61441 (diff)
downloadgit-75a95490474ab6e991cbbbd10d980498a9109648.tar.gz
git-75a95490474ab6e991cbbbd10d980498a9109648.tar.xz
avoid segfaults on parse_object failure
Many call-sites of parse_object assume that they will get a non-NULL return value; this is not the case if we encounter an error while parsing the object. This patch adds a wrapper function around parse_object that handles dying automatically, and uses it anywhere we immediately try to access the return value as a non-NULL pointer (i.e., anywhere that we would currently segfault). This wrapper may also be useful in other places. The most obvious one is code like: o = parse_object(sha1); if (!o) die(...); However, these should not be mechanically converted to parse_object_or_die, as the die message is sometimes customized. Later patches can address these sites on a case-by-case basis. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'object.c')
-rw-r--r--object.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/object.c b/object.c
index 4af3451bf..20703f52e 100644
--- a/object.c
+++ b/object.c
@@ -185,6 +185,16 @@ struct object *parse_object_buffer(const unsigned char *sha1, enum object_type t
return obj;
}
+struct object *parse_object_or_die(const unsigned char *sha1,
+ const char *name)
+{
+ struct object *o = parse_object(sha1);
+ if (o)
+ return o;
+
+ die(_("unable to parse object: %s"), name ? name : sha1_to_hex(sha1));
+}
+
struct object *parse_object(const unsigned char *sha1)
{
unsigned long size;