Added error checking when calling git_tree_entry_bypath
This commit is contained in:
parent
398e717ec6
commit
689412d0a2
@ -239,6 +239,7 @@ Tree_getitem(Tree *self, PyObject *value)
|
|||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
const git_tree_entry *entry;
|
const git_tree_entry *entry;
|
||||||
|
int err;
|
||||||
|
|
||||||
/* Case 1: integer */
|
/* Case 1: integer */
|
||||||
if (PyInt_Check(value))
|
if (PyInt_Check(value))
|
||||||
@ -251,13 +252,19 @@ Tree_getitem(Tree *self, PyObject *value)
|
|||||||
|
|
||||||
if (strchr(name, '/') != NULL) {
|
if (strchr(name, '/') != NULL) {
|
||||||
/* Case 2a: path string */
|
/* 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 {
|
} else {
|
||||||
/* Case 2b: base name */
|
/* Case 2b: base name */
|
||||||
entry = git_tree_entry_byname(self->tree, name);
|
entry = git_tree_entry_byname(self->tree, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(name);
|
free(name);
|
||||||
|
|
||||||
if (!entry) {
|
if (!entry) {
|
||||||
PyErr_SetObject(PyExc_KeyError, value);
|
PyErr_SetObject(PyExc_KeyError, value);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -70,6 +70,7 @@ class TreeTest(utils.BareRepoTestCase):
|
|||||||
|
|
||||||
sha = '297efb891a47de80be0cfe9c639e4b8c9b450989'
|
sha = '297efb891a47de80be0cfe9c639e4b8c9b450989'
|
||||||
self.assertTreeEntryEqual(tree['c/d'], sha, 'd', 0o0100644)
|
self.assertTreeEntryEqual(tree['c/d'], sha, 'd', 0o0100644)
|
||||||
|
self.assertRaisesWithArg(KeyError, 'ab/cd', lambda: tree['ab/cd'])
|
||||||
|
|
||||||
def test_read_subtree(self):
|
def test_read_subtree(self):
|
||||||
tree = self.repo[TREE_SHA]
|
tree = self.repo[TREE_SHA]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user