Make "struct tree" contain the pointer to the tree buffer
[git.git] / fsck-objects.c
index cc09143..5e65df4 100644 (file)
@@ -198,17 +198,16 @@ static int fsck_tree(struct tree *item)
                        default:
                                break;
                        }
-                       free(last->name);
                        free(last);
                }
 
                last = entry;
        }
-       if (last) {
-               free(last->name);
+       if (last)
                free(last);
-       }
        item->entries = NULL;
+       free(item->buffer);
+       item->buffer = NULL;
 
        retval = 0;
        if (has_full_path) {
@@ -446,6 +445,13 @@ static int fsck_cache_tree(struct cache_tree *it)
 
        if (0 <= it->entry_count) {
                struct object *obj = parse_object(it->sha1);
+               if (!obj) {
+                       error("%s: invalid sha1 pointer in cache-tree",
+                             sha1_to_hex(it->sha1));
+                       return 1;
+               }
+               mark_reachable(obj, REACHABLE);
+               obj->used = 1;
                if (obj->type != tree_type)
                        err |= objerror(obj, "non-tree in cache-tree");
        }