diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 8b4c060..62f593f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,7 @@ dev - Support for Python 3.14 has been added. - Support for PyPy 3.11 has been added. +- Fixed perfect match missed for headers with empty values **Bugfixes** diff --git a/src/hpack/hpack.py b/src/hpack/hpack.py index 7e33e77..20dce0a 100644 --- a/src/hpack/hpack.py +++ b/src/hpack/hpack.py @@ -313,7 +313,7 @@ def add(self, to_add: tuple[bytes, bytes], sensitive: bool, huffman: bool = Fals # can use the indexed literal. index, name, perfect = match - if perfect: + if perfect is not None: # Indexed representation. encoded = self._encode_indexed(index) else: diff --git a/tests/test_hpack.py b/tests/test_hpack.py index 3864a33..e9c170c 100644 --- a/tests/test_hpack.py +++ b/tests/test_hpack.py @@ -126,6 +126,18 @@ def test_indexed_header_field(self): assert e.encode(header_set, huffman=False) == result assert list(e.header_table.dynamic_entries) == [] + def test_indexed_header_field_empty_value_string(self): + """ + The header field representation uses an indexed header field, from + the static table. + """ + e = Encoder() + header_set = {':authority': ''} + result = b'\x81' + + assert e.encode(header_set, huffman=False) == result + assert list(e.header_table.dynamic_entries) == [] + def test_indexed_header_field_from_static_table(self): e = Encoder() e.header_table_size = 0