Merge branch 'jk/validate-headref-fix'
authorJunio C Hamano <gitster@pobox.com>
Tue, 3 Oct 2017 06:42:49 +0000 (15:42 +0900)
committerJunio C Hamano <gitster@pobox.com>
Tue, 3 Oct 2017 06:42:49 +0000 (15:42 +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 b533ec938dd18320beb533969b0763992d4d3a85,883324b10a978c9815cfe2dc66c7539b33d280dd..5aa9244eb24d95717f2b20e207266c289c925757
--- 1/path.c
--- 2/path.c
+++ b/path.c
@@@ -9,7 -9,6 +9,7 @@@
  #include "worktree.h"
  #include "submodule-config.h"
  #include "path.h"
 +#include "packfile.h"
  
  static int get_st_mode_bits(const char *path, int *mode)
  {
@@@ -637,8 -636,9 +637,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;