X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=apply.c;h=50be8f3e22d0906d09410b89ebc8d06f928ba631;hb=f9039f30d56e3815eaab870d8b19c7b94aded8aa;hp=129edb18890196b2947c1e3add85ce5ef9bb0ee7;hpb=011f4274bbb14e44035586f2ede695d584b8cfd2;p=git.git diff --git a/apply.c b/apply.c index 129edb18..50be8f3e 100644 --- a/apply.c +++ b/apply.c @@ -893,12 +893,24 @@ static int parse_chunk(char *buffer, unsigned long size, struct patch *patch) patchsize = parse_single_patch(buffer + offset + hdrsize, size - offset - hdrsize, patch); if (!patchsize) { - static const char binhdr[] = "Binary files "; - - if (sizeof(binhdr) - 1 < size - offset - hdrsize && - !memcmp(binhdr, buffer + hdrsize + offset, - sizeof(binhdr)-1)) - patch->is_binary = 1; + static const char *binhdr[] = { + "Binary files ", + "Files ", + NULL, + }; + int i; + int hd = hdrsize + offset; + unsigned long llen = linelen(buffer + hd, size - hd); + + if (!memcmp(" differ\n", buffer + hd + llen - 8, 8)) + for (i = 0; binhdr[i]; i++) { + int len = strlen(binhdr[i]); + if (len < size - hd && + !memcmp(binhdr[i], buffer + hd, len)) { + patch->is_binary = 1; + break; + } + } /* Empty patch cannot be applied if: * - it is a binary patch and we do not do binary_replace, or