summaryrefslogtreecommitdiff
path: root/path.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2017-10-03 15:42:49 +0900
committerJunio C Hamano <gitster@pobox.com>2017-10-03 15:42:49 +0900
commitbb3afad386aa2852c2ea86ac50ba33e770ee7efc (patch)
tree84b24b23472634ff3c3597b9ab863af989d004df /path.c
parentcb1083ca23c2f78140b66b925ed0b82fe400eea5 (diff)
parent0bca165fdb57b032e505161a9450fd5e3edfd19a (diff)
downloadgit-bb3afad386aa2852c2ea86ac50ba33e770ee7efc.tar.gz
Merge branch 'jk/validate-headref-fix'
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 b533ec938d..5aa9244eb2 100644
--- a/path.c
+++ b/path.c
@@ -637,8 +637,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;
@@ -662,24 +663,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;