From 053b5096680dd9eaeb679f673f5924a05fe514d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Tue, 19 Jun 2012 23:36:36 +0200 Subject: [PATCH] revparse: handle a non-existent path in the colon syntax oid_for_tree_path may not always find the path in the tree, in which case we need to return an error. The current code doesn't do this and results in undefined behavior. --- src/revparse.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/revparse.c b/src/revparse.c index 0c053b397..1f0e7da34 100644 --- a/src/revparse.c +++ b/src/revparse.c @@ -567,6 +567,7 @@ static int handle_colon_syntax(git_object **out, { git_tree *tree; git_oid oid; + int error; /* Dereference until we reach a tree. */ if (dereference_to_type(&obj, obj, GIT_OBJ_TREE) < 0) { @@ -575,8 +576,12 @@ static int handle_colon_syntax(git_object **out, tree = (git_tree*)obj; /* Find the blob at the given path. */ - oid_for_tree_path(&oid, tree, repo, path); + error = oid_for_tree_path(&oid, tree, repo, path); git_tree_free(tree); + + if (error < 0) + return error; + return git_object_lookup(out, repo, &oid, GIT_OBJ_ANY); }