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>
Junio C Hamano committed
Oct 27, 2011 at 11:18 UTC
5fb8c05f2e5da483898019f7abc0e52e07bc0c50
1 file changed
+7
-3
tree-walk.c
+7
-3
@@ -465,7 +465,6 @@ int get_tree_entry(const unsigned char *tree_sha1, const char *name, unsigned ch
465
int retval;
466
void *tree;
467
unsigned long size;
468
- struct tree_desc t;
468
unsigned char root[20];
469
470
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
477
return 0;
478
}
479
481
- init_tree_desc(&t, tree, size);
482
- retval = find_tree_entry(&t, name, sha1, mode);
480
+ if (!size) {
481
+ retval = -1;
482
+ } else {
483
+ struct tree_desc t;
484
+ init_tree_desc(&t, tree, size);
485
+ retval = find_tree_entry(&t, name, sha1, mode);
486
+ }
487
free(tree);
488
return retval;
489
}