1
0
mirror of https://github.com/git/git.git synced 2024-09-28 12:21:46 +02:00

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
This commit is contained in:
Junio C Hamano 2017-10-18 14:19:12 +09:00
commit 41052b11bc

23
path.c
View File

@ -635,8 +635,9 @@ void strbuf_git_common_path(struct strbuf *sb,
int validate_headref(const char *path) int validate_headref(const char *path)
{ {
struct stat st; struct stat st;
char *buf, buffer[256]; char buffer[256];
unsigned char sha1[20]; const char *refname;
struct object_id oid;
int fd; int fd;
ssize_t len; ssize_t len;
@ -660,24 +661,24 @@ int validate_headref(const char *path)
len = read_in_full(fd, buffer, sizeof(buffer)-1); len = read_in_full(fd, buffer, sizeof(buffer)-1);
close(fd); close(fd);
if (len < 0)
return -1;
buffer[len] = '\0';
/* /*
* Is it a symbolic ref? * Is it a symbolic ref?
*/ */
if (len < 4) if (skip_prefix(buffer, "ref:", &refname)) {
return -1; while (isspace(*refname))
if (!memcmp("ref:", buffer, 4)) { refname++;
buf = buffer + 4; if (starts_with(refname, "refs/"))
len -= 4;
while (len && isspace(*buf))
buf++, len--;
if (len >= 5 && !memcmp("refs/", buf, 5))
return 0; return 0;
} }
/* /*
* Is this a detached HEAD? * Is this a detached HEAD?
*/ */
if (!get_sha1_hex(buffer, sha1)) if (!get_oid_hex(buffer, &oid))
return 0; return 0;
return -1; return -1;