Merge branch 'jk/validate-headref-fix' into maint
authorJunio C Hamano <gitster@pobox.com>
Wed, 18 Oct 2017 05:19:12 +0000 (14:19 +0900)
committerJunio C Hamano <gitster@pobox.com>
Wed, 18 Oct 2017 05:19:12 +0000 (14:19 +0900)
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

1  2 
path.c
diff --combined path.c
index 2fecf854fe6d87cfef34678f1bc9c864ea834cb4,883324b10a978c9815cfe2dc66c7539b33d280dd..335d4dd8777bccfe84415f8d8b738a9a844e248d
--- 1/path.c
--- 2/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;
  
        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;