diff --git a/src/object.c b/src/object.c index 53666ffe4..3fc984b45 100644 --- a/src/object.c +++ b/src/object.c @@ -374,27 +374,26 @@ int git_object_lookup_bypath( int error = -1; git_tree *tree = NULL; git_tree_entry *entry = NULL; - git_object *tmpobj = NULL; assert(out && treeish && path); - if (((error = git_object_peel((git_object**)&tree, treeish, GIT_OBJ_TREE)) < 0) || - ((error = git_tree_entry_bypath(&entry, tree, path)) < 0) || - ((error = git_tree_entry_to_object(&tmpobj, git_object_owner(treeish), entry)) < 0)) + if ((error = git_object_peel((git_object**)&tree, treeish, GIT_OBJ_TREE) < 0) || + (error = git_tree_entry_bypath(&entry, tree, path)) < 0) { goto cleanup; } - if (type == GIT_OBJ_ANY || git_object_type(tmpobj) == type) { - *out = tmpobj; - } else { + if (type != GIT_OBJ_ANY && git_tree_entry_type(entry) != type) + { giterr_set(GITERR_OBJECT, "object at path '%s' is not of the asked-for type %d", path, type); error = GIT_EINVALIDSPEC; - git_object_free(tmpobj); + goto cleanup; } + error = git_tree_entry_to_object(out, git_object_owner(treeish), entry); + cleanup: git_tree_entry_free(entry); git_tree_free(tree);