From: Junio C Hamano Date: Fri, 25 May 2007 02:01:50 +0000 (-0700) Subject: Merge branch 'maint-1.5.1' into maint X-Git-Tag: v1.5.2.1~16 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/76026200eee9fea016c2d87f472bb13cb15f47b2?hp=-c Merge branch 'maint-1.5.1' into maint * maint-1.5.1: fix memory leak in parse_object when check_sha1_signature fails name-rev: tolerate clock skew in committer dates --- 76026200eee9fea016c2d87f472bb13cb15f47b2 diff --combined object.c index 37d1363359,ccd7dd796e..cfc4969ed9 --- a/object.c +++ b/object.c @@@ -105,13 -105,11 +105,13 @@@ static void grow_object_hash(void obj_hash_size = new_hash_size; } -void created_object(const unsigned char *sha1, struct object *obj) +void *create_object(const unsigned char *sha1, int type, void *o) { + struct object *obj = o; + obj->parsed = 0; obj->used = 0; - obj->type = OBJ_NONE; + obj->type = type; obj->flags = 0; hashcpy(obj->sha1, sha1); @@@ -120,14 -118,25 +120,14 @@@ insert_obj_hash(obj, obj_hash, obj_hash_size); nr_objs++; + return obj; } -union any_object { - struct object object; - struct commit commit; - struct tree tree; - struct blob blob; - struct tag tag; -}; - struct object *lookup_unknown_object(const unsigned char *sha1) { struct object *obj = lookup_object(sha1); - if (!obj) { - union any_object *ret = xcalloc(1, sizeof(*ret)); - created_object(sha1, &ret->object); - ret->object.type = OBJ_NONE; - return &ret->object; - } + if (!obj) + obj = create_object(sha1, OBJ_NONE, alloc_object_node()); return obj; } @@@ -176,6 -185,7 +176,7 @@@ struct object *parse_object(const unsig if (buffer) { struct object *obj; if (check_sha1_signature(sha1, buffer, size, typename(type)) < 0) { + free(buffer); error("sha1 mismatch %s\n", sha1_to_hex(sha1)); return NULL; } @@@ -230,11 -240,6 +231,11 @@@ int object_list_contains(struct object_ } void add_object_array(struct object *obj, const char *name, struct object_array *array) +{ + add_object_array_with_mode(obj, name, array, S_IFINVALID); +} + +void add_object_array_with_mode(struct object *obj, const char *name, struct object_array *array, unsigned mode) { unsigned nr = array->nr; unsigned alloc = array->alloc; @@@ -248,6 -253,5 +249,6 @@@ } objects[nr].item = obj; objects[nr].name = name; + objects[nr].mode = mode; array->nr = ++nr; }