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:
parent
2ed02887bd
commit
9add69b1b1
7
apply.c
7
apply.c
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user