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>
This commit is contained in:

committed by
Junio C Hamano

parent
7e2010537e
commit
75a9549047
6
bundle.c
6
bundle.c
@ -279,12 +279,12 @@ int create_bundle(struct bundle_header *header, const char *path,
|
||||
if (buf.len > 0 && buf.buf[0] == '-') {
|
||||
write_or_die(bundle_fd, buf.buf, buf.len);
|
||||
if (!get_sha1_hex(buf.buf + 1, sha1)) {
|
||||
struct object *object = parse_object(sha1);
|
||||
struct object *object = parse_object_or_die(sha1, buf.buf);
|
||||
object->flags |= UNINTERESTING;
|
||||
add_pending_object(&revs, object, xstrdup(buf.buf));
|
||||
}
|
||||
} else if (!get_sha1_hex(buf.buf, sha1)) {
|
||||
struct object *object = parse_object(sha1);
|
||||
struct object *object = parse_object_or_die(sha1, buf.buf);
|
||||
object->flags |= SHOWN;
|
||||
}
|
||||
}
|
||||
@ -361,7 +361,7 @@ int create_bundle(struct bundle_header *header, const char *path,
|
||||
* end up triggering "empty bundle"
|
||||
* error.
|
||||
*/
|
||||
obj = parse_object(sha1);
|
||||
obj = parse_object_or_die(sha1, e->name);
|
||||
obj->flags |= SHOWN;
|
||||
add_pending_object(&revs, obj, e->name);
|
||||
}
|
||||
|
Reference in New Issue
Block a user