Added error checking when calling git_tree_entry_bypath

This commit is contained in:
Ben Davis 2012-08-11 16:24:30 -05:00
parent 398e717ec6
commit 689412d0a2
2 changed files with 9 additions and 1 deletions
src/pygit2
test

@ -239,6 +239,7 @@ Tree_getitem(Tree *self, PyObject *value)
{
char *name;
const git_tree_entry *entry;
int err;
/* Case 1: integer */
if (PyInt_Check(value))
@ -251,13 +252,19 @@ Tree_getitem(Tree *self, PyObject *value)
if (strchr(name, '/') != NULL) {
/* Case 2a: path string */
git_tree_entry_bypath(&entry, self->tree, name);
err = git_tree_entry_bypath(&entry, self->tree, name);
if (err == GIT_ENOTFOUND)
entry = NULL;
else if (err < 0)
return Error_set(err);
} else {
/* Case 2b: base name */
entry = git_tree_entry_byname(self->tree, name);
}
free(name);
if (!entry) {
PyErr_SetObject(PyExc_KeyError, value);
return NULL;

@ -70,6 +70,7 @@ class TreeTest(utils.BareRepoTestCase):
sha = '297efb891a47de80be0cfe9c639e4b8c9b450989'
self.assertTreeEntryEqual(tree['c/d'], sha, 'd', 0o0100644)
self.assertRaisesWithArg(KeyError, 'ab/cd', lambda: tree['ab/cd'])
def test_read_subtree(self):
tree = self.repo[TREE_SHA]