From: Junio C Hamano Date: Wed, 18 Oct 2017 05:19:12 +0000 (+0900) Subject: Merge branch 'jk/validate-headref-fix' into maint X-Git-Tag: v2.15.0-rc2~5^2~15 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/41052b11bc5a128c6a4266ea60c712a088cb2166?hp=-c 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 --- 41052b11bc5a128c6a4266ea60c712a088cb2166 diff --combined path.c index 2fecf854fe,883324b10a..335d4dd877 --- a/path.c +++ b/path.c @@@ -33,10 -33,11 +33,10 @@@ static struct strbuf *get_pathname(void return sb; } -static char *cleanup_path(char *path) +static const char *cleanup_path(const char *path) { /* Clean it up */ - if (!memcmp(path, "./", 2)) { - path += 2; + if (skip_prefix(path, "./", &path)) { while (*path == '/') path++; } @@@ -45,7 -46,7 +45,7 @@@ static void strbuf_cleanup_path(struct strbuf *sb) { - char *path = cleanup_path(sb->buf); + const char *path = cleanup_path(sb->buf); if (path > sb->buf) strbuf_remove(sb, 0, path - sb->buf); } @@@ -62,7 -63,7 +62,7 @@@ char *mksnpath(char *buf, size_t n, con strlcpy(buf, bad_path, n); return buf; } - return cleanup_path(buf); + return (char *)cleanup_path(buf); } static int dir_prefix(const char *buf, const char *dir) @@@ -635,8 -636,9 +635,9 @@@ void strbuf_git_common_path(struct strb 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 -662,24 +661,24 @@@ 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;