Merge branch 'jc/ustar-checksum-is-unsigned'

"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
This commit is contained in:
Junio C Hamano 2012-06-25 11:24:57 -07:00
commit dd39379a32

View 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) 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; unsigned int chksum = 0;
while (p < header->chksum) while (p < (const unsigned char *)header->chksum)
chksum += *p++; chksum += *p++;
chksum += sizeof(header->chksum) * ' '; chksum += sizeof(header->chksum) * ' ';
p += 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++; chksum += *p++;
return chksum; return chksum;
} }