diff options
author | Vicent Marti <tanoku@gmail.com> | 2013-11-20 12:54:24 +0100 |
---|---|---|
committer | Vicent Marti <tanoku@gmail.com> | 2013-11-20 12:54:24 +0100 |
commit | 4b0a36e881506a02b43a4ae3c19c93c919b36eeb (patch) | |
tree | 026182fa30273a4c1649928b6db3fc5335bd1ea4 /src/tree-cache.c | |
parent | 29d7242b1dcd1f09a63417abd648a6217b85d301 (diff) | |
parent | 43cb8b32428b1b29994874349ec22eb5372e152c (diff) | |
download | libgit2-4b0a36e881506a02b43a4ae3c19c93c919b36eeb.tar.gz |
Merge branch 'development'
Diffstat (limited to 'src/tree-cache.c')
-rw-r--r-- | src/tree-cache.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/tree-cache.c b/src/tree-cache.c index 97ffc2acf..1d3997154 100644 --- a/src/tree-cache.c +++ b/src/tree-cache.c @@ -138,9 +138,11 @@ static int read_tree_internal(git_tree_cache **out, tree->children = git__malloc(tree->children_count * sizeof(git_tree_cache *)); GITERR_CHECK_ALLOC(tree->children); + memset(tree->children, 0x0, tree->children_count * sizeof(git_tree_cache *)); + for (i = 0; i < tree->children_count; ++i) { if (read_tree_internal(&tree->children[i], &buffer, buffer_end, tree) < 0) - return -1; + goto corrupted; } } @@ -150,7 +152,7 @@ static int read_tree_internal(git_tree_cache **out, corrupted: git_tree_cache_free(tree); - giterr_set(GITERR_INDEX, "Corruped TREE extension in index"); + giterr_set(GITERR_INDEX, "Corrupted TREE extension in index"); return -1; } @@ -162,7 +164,7 @@ int git_tree_cache_read(git_tree_cache **tree, const char *buffer, size_t buffer return -1; if (buffer < buffer_end) { - giterr_set(GITERR_INDEX, "Corruped TREE extension in index (unexpected trailing data)"); + giterr_set(GITERR_INDEX, "Corrupted TREE extension in index (unexpected trailing data)"); return -1; } @@ -176,9 +178,12 @@ void git_tree_cache_free(git_tree_cache *tree) if (tree == NULL) return; - for (i = 0; i < tree->children_count; ++i) - git_tree_cache_free(tree->children[i]); + if (tree->children != NULL) { + for (i = 0; i < tree->children_count; ++i) + git_tree_cache_free(tree->children[i]); + + git__free(tree->children); + } - git__free(tree->children); git__free(tree); } |