Skip to content

Commit 6a1b086

Browse files
authored
[PR #9556/df0c461 backport][3.11] Fix Cython WebSocketReader byte signedness (#9557)
1 parent b535981 commit 6a1b086

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

CHANGES/9556.feature.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
9543.feature.rst

aiohttp/_websocket/reader_c.pxd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ cdef class WebSocketReader:
7676
buf_length="unsigned int",
7777
data=bytes,
7878
payload=bytearray,
79-
first_byte=char,
80-
second_byte=char,
79+
first_byte="unsigned char",
80+
second_byte="unsigned char",
8181
has_mask=bint,
8282
fin=bint,
8383
)

tests/test_websocket_parser.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,18 @@ def test_parse_frame_length2(parser) -> None:
128128
assert (0, 1, b"1234", False) == (fin, opcode, payload, not not compress)
129129

130130

131-
def test_parse_frame_length4(parser) -> None:
131+
def test_parse_frame_length2_multi_byte(parser: WebSocketReader) -> None:
132+
"""Ensure a multi-byte length is parsed correctly."""
133+
expected_payload = b"1" * 32768
134+
parser.parse_frame(struct.pack("!BB", 0b00000001, 126))
135+
parser.parse_frame(struct.pack("!H", 32768))
136+
res = parser.parse_frame(b"1" * 32768)
137+
fin, opcode, payload, compress = res[0]
138+
139+
assert (0, 1, expected_payload, False) == (fin, opcode, payload, not not compress)
140+
141+
142+
def test_parse_frame_length4(parser: WebSocketReader) -> None:
132143
parser.parse_frame(struct.pack("!BB", 0b00000001, 127))
133144
parser.parse_frame(struct.pack("!Q", 4))
134145
fin, opcode, payload, compress = parser.parse_frame(b"1234")[0]

0 commit comments

Comments
 (0)