Skip to content
Open
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
36 changes: 35 additions & 1 deletion tests/test_encode_decode.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,41 @@ def test_encode_decode_round_trips(self, integer, prefix_bits):
bytes(encoded_result), prefix_bits
)
assert integer == decoded_integer
assert consumed > 0
assert consumed == len(encoded_result)

@given(
integer=integers(min_value=0, max_value=2**32),
prefix_bits=integers(min_value=1, max_value=8),
flags=integers(min_value=0, max_value=255),
suffix=binary()
)
def test_decode_ignores_prefix_flags_and_trailing_data(
self, integer, prefix_bits, flags, suffix
):
"""
Prefix flags and trailing data do not affect the decoded integer.
"""
encoded = encode_integer(integer, prefix_bits)
encoded[0] |= flags & (255 ^ ((1 << prefix_bits) - 1))
buffer = bytes(encoded) + suffix
for data in (buffer, memoryview(buffer)):
assert decode_integer(data, prefix_bits) == (integer, len(encoded))

@given(
integer=integers(min_value=255, max_value=2**32),
prefix_bits=integers(min_value=1, max_value=8)
)
def test_decode_incomplete_integer_representations_fails(
self, integer, prefix_bits
):
"""
Every incomplete prefix of an encoded integer is rejected.
"""
encoded = bytes(encode_integer(integer, prefix_bits))
for length in range(len(encoded)):
for data in (encoded[:length], memoryview(encoded)[:length]):
with pytest.raises(HPACKDecodingError):
decode_integer(data, prefix_bits)

def test_decode_too_long_fails(self):
"""
Expand Down