diff options
| author | Carlos Martín Nieto <cmn@dwim.me> | 2013-08-17 07:11:31 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <cmn@dwim.me> | 2013-10-11 16:29:59 +0200 |
| commit | 7c9f5bec5182eb587fbc1094f2235d2babb70ad9 (patch) | |
| tree | 59a8a653c0ae1943deb133c42a2fc730bc995bd6 | |
| parent | 51a5e13347a0f834e2d847b46d2f6002f03bd49f (diff) | |
| download | libgit2-7c9f5bec5182eb587fbc1094f2235d2babb70ad9.tar.gz | |
futils: return GIT_ENOTFOUND when trying to read a directory
This lets the reference code return not-found when the user asks to
look up a reference when in fact they pass a namespace.
| -rw-r--r-- | src/fileops.c | 8 | ||||
| -rw-r--r-- | tests-clar/refs/lookup.c | 12 |
2 files changed, 19 insertions, 1 deletions
diff --git a/src/fileops.c b/src/fileops.c index 3a5a53074..210f45fa1 100644 --- a/src/fileops.c +++ b/src/fileops.c @@ -165,7 +165,13 @@ int git_futils_readbuffer_updated( return -1; } - if (S_ISDIR(st.st_mode) || !git__is_sizet(st.st_size+1)) { + + if (S_ISDIR(st.st_mode)) { + giterr_set(GITERR_INVALID, "requested file is a directory"); + return GIT_ENOTFOUND; + } + + if (!git__is_sizet(st.st_size+1)) { giterr_set(GITERR_OS, "Invalid regular file stat for '%s'", path); return -1; } diff --git a/tests-clar/refs/lookup.c b/tests-clar/refs/lookup.c index 0dbebc5c2..2e31cf0f6 100644 --- a/tests-clar/refs/lookup.c +++ b/tests-clar/refs/lookup.c @@ -46,3 +46,15 @@ void test_refs_lookup__oid(void) cl_git_pass(git_oid_fromstr(&expected, "1385f264afb75a56a5bec74243be9b367ba4ca08")); cl_assert(git_oid_cmp(&tag, &expected) == 0); } + +void test_refs_lookup__namespace(void) +{ + int error; + git_reference *ref; + + error = git_reference_lookup(&ref, g_repo, "refs/heads"); + cl_assert_equal_i(error, GIT_ENOTFOUND); + + error = git_reference_lookup(&ref, g_repo, "refs/heads/"); + cl_assert_equal_i(error, GIT_EINVALIDSPEC); +} |
