diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ddb58c6..df2fb4b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -17,6 +17,7 @@ dev **Bugfixes** - Headers marked as `sensitive` will no longer log their value at DEBUG level. Instead a placeholder value of `SENSITIVE_REDACTED` is logged. +- Fixed perfect match missed for headers with empty values. 4.1.0 (2025-01-22) ------------------ diff --git a/src/hpack/hpack.py b/src/hpack/hpack.py index a017caa..53ef708 100644 --- a/src/hpack/hpack.py +++ b/src/hpack/hpack.py @@ -320,7 +320,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