From: Junio C Hamano Date: Thu, 6 Jun 2013 19:19:04 +0000 (-0700) Subject: Merge branch 'sb/archive-zip-double-assignment-fix' X-Git-Tag: v1.8.4-rc0~201 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/d4f6b5f51ce2c974c7630b5491562a21821c8fe4?ds=inline;hp=-c Merge branch 'sb/archive-zip-double-assignment-fix' * sb/archive-zip-double-assignment-fix: archive-zip:write_zip_entry: Remove second reset of size variable to zero. --- d4f6b5f51ce2c974c7630b5491562a21821c8fe4 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;