Merge branch 'jc/ustar-checksum-is-unsigned' into maint
authorJunio C Hamano <gitster@pobox.com>
Wed, 11 Jul 2012 19:45:07 +0000 (12:45 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 11 Jul 2012 19:45:07 +0000 (12:45 -0700)
"git archive" incorrectly computed the header checksum; the symptom
was observed only when using pathnames with hi-bit set.

* jc/ustar-checksum-is-unsigned:
archive: ustar header checksum is computed unsigned

archive-tar.c
index dc91c6b50d56ad8fd9921d0e47f5b45cafdcfc4d..0ba3f25cf579d6629566a39d4d5ac19b51293ed5 100644 (file)
@@ -139,13 +139,13 @@ static void strbuf_append_ext_header(struct strbuf *sb, const char *keyword,
 
 static unsigned int ustar_header_chksum(const struct ustar_header *header)
 {
-       const char *p = (const char *)header;
+       const unsigned char *p = (const unsigned char *)header;
        unsigned int chksum = 0;
-       while (p < header->chksum)
+       while (p < (const unsigned char *)header->chksum)
                chksum += *p++;
        chksum += sizeof(header->chksum) * ' ';
        p += sizeof(header->chksum);
-       while (p < (const char *)header + sizeof(struct ustar_header))
+       while (p < (const unsigned char *)header + sizeof(struct ustar_header))
                chksum += *p++;
        return chksum;
 }