summaryrefslogtreecommitdiff
path: root/tree-walk.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-10-27 18:18:40 (GMT)
committerJunio C Hamano <gitster@pobox.com>2011-10-27 18:24:01 (GMT)
commit5fb8c05f2e5da483898019f7abc0e52e07bc0c50 (patch)
tree72c2b4a42a428bdd78fcbdb00b9d21b1eda8e1a7 /tree-walk.c
parent0de1633783685e9fb1943551217cdda7edbd245b (diff)
downloadgit-5fb8c05f2e5da483898019f7abc0e52e07bc0c50.zip
git-5fb8c05f2e5da483898019f7abc0e52e07bc0c50.tar.gz
git-5fb8c05f2e5da483898019f7abc0e52e07bc0c50.tar.bz2
get_tree_entry(): do not call find_tree_entry() on an empty tree
We know we will find nothing. This incidentally squelches false warning from gcc about potentially uninitialized usage of t.entry fields. For an empty tree, it is true that init_tree_desc() does not call decode_tree_entry() and the tree_desc is left uninitialized, but find_tree_entry() only calls tree_entry_extract() that uses the tree_desc while it has more things to read from the tree, so the uninitialized t.entry fields are never used in such a case anyway. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'tree-walk.c')
-rw-r--r--tree-walk.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/tree-walk.c b/tree-walk.c
index f5d19f9..cc2f14a 100644
--- a/tree-walk.c
+++ b/tree-walk.c
@@ -465,7 +465,6 @@ int get_tree_entry(const unsigned char *tree_sha1, const char *name, unsigned ch
int retval;
void *tree;
unsigned long size;
- struct tree_desc t;
unsigned char root[20];
tree = read_object_with_reference(tree_sha1, tree_type, &size, root);
@@ -478,8 +477,13 @@ int get_tree_entry(const unsigned char *tree_sha1, const char *name, unsigned ch
return 0;
}
- init_tree_desc(&t, tree, size);
- retval = find_tree_entry(&t, name, sha1, mode);
+ if (!size) {
+ retval = -1;
+ } else {
+ struct tree_desc t;
+ init_tree_desc(&t, tree, size);
+ retval = find_tree_entry(&t, name, sha1, mode);
+ }
free(tree);
return retval;
}