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
13
object.h
13
object.h
@ -54,9 +54,20 @@ struct object *lookup_object(const unsigned char *sha1);
|
||||
|
||||
extern void *create_object(const unsigned char *sha1, int type, void *obj);
|
||||
|
||||
/** Returns the object, having parsed it to find out what it is. **/
|
||||
/*
|
||||
* Returns the object, having parsed it to find out what it is.
|
||||
*
|
||||
* Returns NULL if the object is missing or corrupt.
|
||||
*/
|
||||
struct object *parse_object(const unsigned char *sha1);
|
||||
|
||||
/*
|
||||
* Like parse_object, but will die() instead of returning NULL. If the
|
||||
* "name" parameter is not NULL, it is included in the error message
|
||||
* (otherwise, the sha1 hex is given).
|
||||
*/
|
||||
struct object *parse_object_or_die(const unsigned char *sha1, const char *name);
|
||||
|
||||
/* Given the result of read_sha1_file(), returns the object after
|
||||
* parsing it. eaten_p indicates if the object has a borrowed copy
|
||||
* of buffer and the caller should not free() it.
|
||||
|
Reference in New Issue
Block a user