Skip to content

Commit 8112e63

Browse files
committed
Fix substring check used instead of equality for header names
The `in` operator on `bytes` performs substring search, not equality. `header[0] in b"cookie"` matches any header name that is a substring of "cookie" (e.g. b"co", b"ok", b"e"), not just b"cookie" itself. This means short header names that happen to be substrings of "cookie" get incorrectly promoted to NeverIndexedHeaderTuple when their value is under 20 bytes, potentially affecting HPACK compression behavior. Changed both occurrences to use `==` for exact comparison: - Line 91: cookie header check in _secure_headers - Line 350: :method pseudo-header check in _reject_pseudo_header_fields
1 parent 18fa348 commit 8112e63

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

src/h2/utilities.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ def _secure_headers(headers: Iterable[Header],
8888
"""
8989
for header in headers:
9090
assert isinstance(header[0], bytes)
91-
if header[0] in _SECURE_HEADERS or (header[0] in b"cookie" and len(header[1]) < 20):
91+
if header[0] in _SECURE_HEADERS or (header[0] == b"cookie" and len(header[1]) < 20):
9292
yield NeverIndexedHeaderTuple(header[0], header[1])
9393
else:
9494
yield header
@@ -347,7 +347,7 @@ def _reject_pseudo_header_fields(headers: Iterable[Header],
347347
msg = f"Received custom pseudo-header field {header[0]!r}"
348348
raise ProtocolError(msg)
349349

350-
if header[0] in b":method":
350+
if header[0] == b":method":
351351
method = header[1]
352352

353353
else:

0 commit comments

Comments
 (0)