From 72b86bae50f3dc0ec1a9df0b62c70ab9bdb37c77 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Fri, 11 May 2012 11:58:02 -0700 Subject: [PATCH] Rev-parse: better error handling for chaining. Fixed an error where "nonexistant^N" or similar would fall into an assert. This now properly returns an error. --- src/revparse.c | 5 ++++- tests-clar/refs/revparse.c | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/revparse.c b/src/revparse.c index 7cb96b806..3487f5638 100644 --- a/src/revparse.c +++ b/src/revparse.c @@ -564,7 +564,10 @@ int git_revparse_single(git_object **out, git_repository *repo, const char *spec if (current_state != next_state && next_state != REVPARSE_STATE_DONE) { /* Leaving INIT state, find the object specified, in case that state needs it */ - revparse_lookup_object(&next_obj, repo, git_buf_cstr(&specbuffer)); + if (revparse_lookup_object(&next_obj, repo, git_buf_cstr(&specbuffer)) < 0) { + retcode = GIT_ERROR; + next_state = REVPARSE_STATE_DONE; + } } break; diff --git a/tests-clar/refs/revparse.c b/tests-clar/refs/revparse.c index b8318923d..31a832aca 100644 --- a/tests-clar/refs/revparse.c +++ b/tests-clar/refs/revparse.c @@ -36,6 +36,8 @@ void test_refs_revparse__cleanup(void) void test_refs_revparse__nonexistant_object(void) { cl_git_fail(git_revparse_single(&g_obj, g_repo, "this doesn't exist")); + cl_git_fail(git_revparse_single(&g_obj, g_repo, "this doesn't exist^1")); + cl_git_fail(git_revparse_single(&g_obj, g_repo, "this doesn't exist~2")); } void test_refs_revparse__shas(void)