commit: fix a segfault when displaying a commit with unreachable parents
[gitweb.git] / object.c
index 37277f94384fff1320381a370dd4d6c91a4ded2c..92813001e25f20ae7dd7a1e0f0ef11ec5d746030 100644 (file)
--- a/object.c
+++ b/object.c
@@ -19,7 +19,8 @@ struct object *get_indexed_object(unsigned int idx)
 }
 
 const char *type_names[] = {
-       "none", "blob", "tree", "commit", "bad"
+       "none", "commit", "tree", "blob", "tag",
+       "bad type 5", "bad type 6", "delta", "bad",
 };
 
 static unsigned int hash_obj(struct object *obj, unsigned int n)
@@ -57,7 +58,7 @@ struct object *lookup_object(const unsigned char *sha1)
 
        i = hashtable_index(sha1);
        while ((obj = obj_hash[i]) != NULL) {
-               if (!memcmp(sha1, obj->sha1, 20))
+               if (!hashcmp(sha1, obj->sha1))
                        break;
                i++;
                if (i == obj_hash_size)
@@ -72,7 +73,7 @@ static void grow_object_hash(void)
        int new_hash_size = obj_hash_size < 32 ? 32 : 2 * obj_hash_size;
        struct object **new_hash;
 
-       new_hash = calloc(new_hash_size, sizeof(struct object *));
+       new_hash = xcalloc(new_hash_size, sizeof(struct object *));
        for (i = 0; i < obj_hash_size; i++) {
                struct object *obj = obj_hash[i];
                if (!obj)
@@ -88,9 +89,9 @@ void created_object(const unsigned char *sha1, struct object *obj)
 {
        obj->parsed = 0;
        obj->used = 0;
-       obj->type = TYPE_NONE;
+       obj->type = OBJ_NONE;
        obj->flags = 0;
-       memcpy(obj->sha1, sha1, 20);
+       hashcpy(obj->sha1, sha1);
 
        if (obj_hash_size - 1 <= nr_objs * 2)
                grow_object_hash();
@@ -131,7 +132,7 @@ struct object *lookup_unknown_object(const unsigned char *sha1)
        if (!obj) {
                union any_object *ret = xcalloc(1, sizeof(*ret));
                created_object(sha1, &ret->object);
-               ret->object.type = TYPE_NONE;
+               ret->object.type = OBJ_NONE;
                return &ret->object;
        }
        return obj;