Code

Merge branch 'maint-1.5.1' into maint
authorJunio C Hamano <junkio@cox.net>
Fri, 25 May 2007 02:01:50 +0000 (19:01 -0700)
committerJunio C Hamano <junkio@cox.net>
Fri, 25 May 2007 02:01:50 +0000 (19:01 -0700)
* maint-1.5.1:
  fix memory leak in parse_object when check_sha1_signature fails
  name-rev: tolerate clock skew in committer dates

1  2 
object.c

diff --combined object.c
index 37d1363359eb54070ed4dc52b9e96d4ad9457db3,ccd7dd796e6b528d5cd08a04ba9d6105086035d6..cfc4969ed9ba0ccfdba8f97637bac20be31d1eba
+++ 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);
  
  
        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;
        }
        objects[nr].item = obj;
        objects[nr].name = name;
 +      objects[nr].mode = mode;
        array->nr = ++nr;
  }