Merge branch 'sb/archive-zip-double-assignment-fix'
authorJunio C Hamano <gitster@pobox.com>
Thu, 6 Jun 2013 19:19:04 +0000 (12:19 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 6 Jun 2013 19:19:04 +0000 (12:19 -0700)
* sb/archive-zip-double-assignment-fix:
archive-zip:write_zip_entry: Remove second reset of size variable to zero.

1  2 
archive-zip.c
diff --combined archive-zip.c
index b2c4fe0e9f9816a6cb79aa8f7a0cb59ae5bf7f8d,04c2f8eed7fba815a28642ccac3471feef62850b..4bde019bce632703d4e336d6404693487cdbcdfb
@@@ -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;
        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);
  
        }
  
        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;
                }
                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;
                        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);
                        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;