Skip to content

Commit 2ae4d6f

Browse files
Message is not upgraded if Upgrade header is missing (#7895) (#7898)
(cherry picked from commit fde031f)
1 parent bb11101 commit 2ae4d6f

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
@@ -510,7 +510,8 @@ def parse_headers(
510510
close_conn = True
511511
elif v == "keep-alive":
512512
close_conn = False
513-
elif v == "upgrade":
513+
# https://www.rfc-editor.org/rfc/rfc9110.html#name-101-switching-protocols
514+
elif v == "upgrade" and headers.get(hdrs.UPGRADE):
514515
upgrade = True
515516

516517
# encoding

tests/test_http_parser.py

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

476476

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

0 commit comments

Comments
 (0)