# HG changeset patch # User Gregory Szorc # Date 2016-11-26 17:07:11 # Node ID 98d7636c472966eb45f17972ed4f422b05946cb2 # Parent 3899c358b45a108f01f5d3506c3cfe579f6dddfd util: limit output chunk size in zlib decompression This is essentially a port of 65bd4b8e48bd, which was inadvertently dropped by 8cd7d0fefd30. diff --git a/mercurial/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -3124,7 +3124,10 @@ class _zlibengine(compressionengine): def gen(): d = zlib.decompressobj() for chunk in filechunkiter(fh): - yield d.decompress(chunk) + while chunk: + # Limit output size to limit memory. + yield d.decompress(chunk, 2 ** 18) + chunk = d.unconsumed_tail return chunkbuffer(gen())