[PATCH] unpack_compressed_entry(): zlib can only process 4GB at a time

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The same theme as "unpack-objects" patch.

Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx>
---
 sha1_file.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/sha1_file.c b/sha1_file.c
index 921a216..12a166f 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -1643,19 +1643,24 @@ static void *unpack_compressed_entry(struct packed_git *p,
 	int st;
 	z_stream stream;
 	unsigned char *buffer, *in;
+	unsigned long bytes_to_inflate;
 
 	buffer = xmallocz(size);
 	memset(&stream, 0, sizeof(stream));
 	stream.next_out = buffer;
-	stream.avail_out = size + 1;
+	bytes_to_inflate = size + 1;
+	stream.avail_out = zlib_buf_cap(bytes_to_inflate);
 
 	git_inflate_init(&stream);
 	do {
+		unsigned char *out0 = stream.next_out;
 		in = use_pack(p, w_curs, curpos, &stream.avail_in);
 		stream.next_in = in;
 		st = git_inflate(&stream, Z_FINISH);
-		if (!stream.avail_out)
+		bytes_to_inflate -= stream.next_out - out0;
+		if (!bytes_to_inflate)
 			break; /* the payload is larger than it should be */
+		stream.avail_out = zlib_buf_cap(bytes_to_inflate);
 		curpos += stream.next_in - in;
 	} while (st == Z_OK || st == Z_BUF_ERROR);
 	git_inflate_end(&stream);
-- 
1.7.6.rc1.118.ge175b4a

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]