apply: fix binary patch detection.

The comparison to find "Binary files " string was looking at a
wrong place when offset != 0.

Also, we may have the full 40-byte textual sha1 on the index
line; two off-by-one errors prevented it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Junio C Hamano 2005-11-14 17:15:07 -08:00
Родитель 2ed02887bd
Коммит 9add69b1b1
1 изменённых файлов: 4 добавлений и 3 удалений

Просмотреть файл

@ -370,7 +370,7 @@ static int gitdiff_index(const char *line, struct patch *patch)
int len;
ptr = strchr(line, '.');
if (!ptr || ptr[1] != '.' || 40 <= ptr - line)
if (!ptr || ptr[1] != '.' || 40 < ptr - line)
return 0;
len = ptr - line;
memcpy(patch->old_sha1_prefix, line, len);
@ -384,7 +384,7 @@ static int gitdiff_index(const char *line, struct patch *patch)
ptr = eol;
len = ptr - line;
if (40 <= len)
if (40 < len)
return 0;
memcpy(patch->new_sha1_prefix, line, len);
patch->new_sha1_prefix[len] = 0;
@ -895,7 +895,8 @@ static int parse_chunk(char *buffer, unsigned long size, struct patch *patch)
static const char binhdr[] = "Binary files ";
if (sizeof(binhdr) - 1 < size - offset - hdrsize &&
!memcmp(binhdr, buffer + hdrsize, sizeof(binhdr)-1))
!memcmp(binhdr, buffer + hdrsize + offset,
sizeof(binhdr)-1))
patch->is_binary = 1;
if (patch->is_binary && !apply && !check)