Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/core/IronPython.Modules/zlib/zlib.net/InfTree.cs
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ internal static int inflate_trees_dynamic(int nl, int nd, int[] c, int[] bl, int
{
z.msg = "oversubscribed distance tree";
}
else if (r == (int)ZLibResultCode.Z_DATA_ERROR)
else if (r == (int)ZLibResultCode.Z_BUF_ERROR)
{
z.msg = "incomplete distance tree";
r = (int)ZLibResultCode.Z_DATA_ERROR;
Expand Down
14 changes: 13 additions & 1 deletion tests/suite/modules/misc/test_zlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import unittest
import zlib

from iptest import IronPythonTestCase, run_test
from iptest import IronPythonTestCase, is_cli, run_test

def create_gzip(text, path):
import gzip
Expand Down Expand Up @@ -76,6 +76,18 @@ def test_deflate(self):
self.assertEqual(do.decompress(self.deflate_data), self.text)
self.assertEqual(zlib.decompress(self.deflate_data, -zlib.MAX_WBITS), self.text)

def test_incomplete_distance_tree(self):
# The literal tree is complete, but the distance alphabet has only one code of length two.
data = bytes.fromhex('05c0010900000080a06dfe3f65')
message = 'incomplete distance tree' if is_cli else 'invalid distances set'
for streaming in (False, True):
with self.subTest(streaming=streaming):
with self.assertRaisesRegex(zlib.error, message):
if streaming:
zlib.decompressobj(-zlib.MAX_WBITS).decompress(data)
else:
zlib.decompress(data, -zlib.MAX_WBITS)

def test_gzip_stream(self):
"""gzip header, uncomplete header"""
for delta in range(1, 25):
Expand Down
Loading