From: Junio C Hamano Date: Fri, 19 Jul 2013 17:40:53 +0000 (-0700) Subject: Merge branch 'sb/archive-zip-double-assignment-fix' into maint X-Git-Tag: v1.8.3.4~29 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/509152d3fa543bd3e030825ecefda298bbc4dfa7?hp=-c Merge branch 'sb/archive-zip-double-assignment-fix' into maint * sb/archive-zip-double-assignment-fix: archive-zip:write_zip_entry: Remove second reset of size variable to zero. --- 509152d3fa543bd3e030825ecefda298bbc4dfa7 diff --combined archive-zip.c index b2c4fe0e9f,04c2f8eed7..4bde019bce --- a/archive-zip.c +++ b/archive-zip.c @@@ -111,9 -111,8 +111,9 @@@ static void copy_le32(unsigned char *de dest[3] = 0xff & (n >> 030); } -static void *zlib_deflate(void *data, unsigned long size, - int compression_level, unsigned long *compressed_size) +static void *zlib_deflate_raw(void *data, unsigned long size, + int compression_level, + unsigned long *compressed_size) { git_zstream stream; unsigned long maxsize; @@@ -121,7 -120,7 +121,7 @@@ int result; memset(&stream, 0, sizeof(stream)); - git_deflate_init(&stream, compression_level); + git_deflate_init_raw(&stream, compression_level); maxsize = git_deflate_bound(&stream, size); buffer = xmalloc(maxsize); @@@ -232,7 -231,6 +232,6 @@@ static int write_zip_entry(struct archi size = 0; compressed_size = 0; buffer = NULL; - size = 0; } else if (S_ISREG(mode) || S_ISLNK(mode)) { enum object_type type = sha1_object_info(sha1, &size); @@@ -266,11 -264,14 +265,11 @@@ } if (buffer && method == 8) { - deflated = zlib_deflate(buffer, size, args->compression_level, - &compressed_size); - if (deflated && compressed_size - 6 < size) { - /* ZLIB --> raw compressed data (see RFC 1950) */ - /* CMF and FLG ... */ - out = (unsigned char *)deflated + 2; - compressed_size -= 6; /* ... and ADLER32 */ - } else { + out = deflated = zlib_deflate_raw(buffer, size, + args->compression_level, + &compressed_size); + if (!out || compressed_size >= size) { + out = buffer; method = 0; compressed_size = size; } @@@ -351,7 -352,7 +350,7 @@@ unsigned char compressed[STREAM_BUFFER_SIZE * 2]; memset(&zstream, 0, sizeof(zstream)); - git_deflate_init(&zstream, args->compression_level); + git_deflate_init_raw(&zstream, args->compression_level); compressed_size = 0; zstream.next_out = compressed; @@@ -368,10 -369,13 +367,10 @@@ result = git_deflate(&zstream, 0); if (result != Z_OK) die("deflate error (%d)", result); - out = compressed; - if (!compressed_size) - out += 2; - out_len = zstream.next_out - out; + out_len = zstream.next_out - compressed; if (out_len > 0) { - write_or_die(1, out, out_len); + write_or_die(1, compressed, out_len); compressed_size += out_len; zstream.next_out = compressed; zstream.avail_out = sizeof(compressed); @@@ -389,8 -393,11 +388,8 @@@ die("deflate error (%d)", result); git_deflate_end(&zstream); - out = compressed; - if (!compressed_size) - out += 2; - out_len = zstream.next_out - out - 4; - write_or_die(1, out, out_len); + out_len = zstream.next_out - compressed; + write_or_die(1, compressed, out_len); compressed_size += out_len; zip_offset += compressed_size;