summaryrefslogtreecommitdiff
path: root/path.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2017-10-18 05:19:12 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-10-18 05:19:12 (GMT)
commit41052b11bc5a128c6a4266ea60c712a088cb2166 (patch)
tree8f5ca85a48d5905e0d295b02467fb4336d103ed2 /path.c
parent7f607f6bfb0494a91996bd613ba689814f7da28e (diff)
parent0bca165fdb57b032e505161a9450fd5e3edfd19a (diff)
downloadgit-41052b11bc5a128c6a4266ea60c712a088cb2166.zip
git-41052b11bc5a128c6a4266ea60c712a088cb2166.tar.gz
git-41052b11bc5a128c6a4266ea60c712a088cb2166.tar.bz2
Merge branch 'jk/validate-headref-fix' into maint
Code clean-up. * jk/validate-headref-fix: validate_headref: use get_oid_hex for detached HEADs validate_headref: use skip_prefix for symref parsing validate_headref: NUL-terminate HEAD buffer
Diffstat (limited to 'path.c')
-rw-r--r--path.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/path.c b/path.c
index 2fecf85..335d4dd 100644
--- a/path.c
+++ b/path.c
@@ -635,8 +635,9 @@ void strbuf_git_common_path(struct strbuf *sb,
int validate_headref(const char *path)
{
struct stat st;
- char *buf, buffer[256];
- unsigned char sha1[20];
+ char buffer[256];
+ const char *refname;
+ struct object_id oid;
int fd;
ssize_t len;
@@ -660,24 +661,24 @@ int validate_headref(const char *path)
len = read_in_full(fd, buffer, sizeof(buffer)-1);
close(fd);
+ if (len < 0)
+ return -1;
+ buffer[len] = '\0';
+
/*
* Is it a symbolic ref?
*/
- if (len < 4)
- return -1;
- if (!memcmp("ref:", buffer, 4)) {
- buf = buffer + 4;
- len -= 4;
- while (len && isspace(*buf))
- buf++, len--;
- if (len >= 5 && !memcmp("refs/", buf, 5))
+ if (skip_prefix(buffer, "ref:", &refname)) {
+ while (isspace(*refname))
+ refname++;
+ if (starts_with(refname, "refs/"))
return 0;
}
/*
* Is this a detached HEAD?
*/
- if (!get_sha1_hex(buffer, sha1))
+ if (!get_oid_hex(buffer, &oid))
return 0;
return -1;