Skip to content

Commit fde031f

Browse files
Message is not upgraded if Upgrade header is missing (#7895)
1 parent 6f54953 commit fde031f

File tree

3 files changed

+12
-1
lines changed

3 files changed

+12
-1
lines changed

CHANGES/7895.bugfix

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fixed messages being reported as upgraded without an Upgrade header in Python parser. -- by :user:`Dreamsorcerer`

aiohttp/http_parser.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,8 @@ def parse_headers(
503503
close_conn = True
504504
elif v == "keep-alive":
505505
close_conn = False
506-
elif v == "upgrade":
506+
# https://www.rfc-editor.org/rfc/rfc9110.html#name-101-switching-protocols
507+
elif v == "upgrade" and headers.get(hdrs.UPGRADE):
507508
upgrade = True
508509

509510
# encoding

tests/test_http_parser.py

+9
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,15 @@ def test_conn_upgrade(parser: Any) -> None:
473473
assert upgrade
474474

475475

476+
def test_bad_upgrade(parser: Any) -> None:
477+
"""Test not upgraded if missing Upgrade header."""
478+
text = b"GET /test HTTP/1.1\r\nconnection: upgrade\r\n\r\n"
479+
messages, upgrade, tail = parser.feed_data(text)
480+
msg = messages[0][0]
481+
assert not msg.upgrade
482+
assert not upgrade
483+
484+
476485
def test_compression_empty(parser: Any) -> None:
477486
text = b"GET /test HTTP/1.1\r\n" b"content-encoding: \r\n\r\n"
478487
messages, upgrade, tail = parser.feed_data(text)

0 commit comments

Comments
 (0)