diff options
author | Junio C Hamano <junkio@cox.net> | 2005-11-14 17:15:07 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-11-14 17:15:07 -0800 |
commit | 9add69b1b1f76db874ed899c46fbe0b252aa3c23 (patch) | |
tree | f2f66041e72c49a6badf3451e642ffdd507c35c2 | |
parent | Fix git-rev-list "date order" with --topo-order (diff) | |
download | tgif-9add69b1b1f76db874ed899c46fbe0b252aa3c23.tar.xz |
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>
-rw-r--r-- | apply.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -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) |