diff options
author | Junio C Hamano <gitster@pobox.com> | 2017-10-18 14:19:12 +0900 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-10-18 14:19:12 +0900 |
commit | 41052b11bc5a128c6a4266ea60c712a088cb2166 (patch) | |
tree | 8f5ca85a48d5905e0d295b02467fb4336d103ed2 | |
parent | Merge branch 'ks/doc-use-camelcase-for-config-name' into maint (diff) | |
parent | validate_headref: use get_oid_hex for detached HEADs (diff) | |
download | tgif-41052b11bc5a128c6a4266ea60c712a088cb2166.tar.xz |
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
-rw-r--r-- | path.c | 23 |
1 files changed, 12 insertions, 11 deletions
@@ -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; |