From: Junio C Hamano Date: Wed, 11 Jul 2012 19:45:07 +0000 (-0700) Subject: Merge branch 'jc/ustar-checksum-is-unsigned' into maint X-Git-Tag: v1.7.11.2~10 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/cf04a660bb471dae76772f63f071768afb6d347c?hp=e49bf52a1a6654f295718be61fc7a86cbee5eadf Merge branch 'jc/ustar-checksum-is-unsigned' into maint "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 --- diff --git a/archive-tar.c b/archive-tar.c index dc91c6b50d..0ba3f25cf5 100644 --- a/archive-tar.c +++ b/archive-tar.c @@ -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; }