mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-02-03 13:14:31 +03:00
Fix full transport overreading
This commit is contained in:
parent
5e43efc55d
commit
49c0645fcb
|
@ -52,10 +52,10 @@ class Full(Transport):
|
|||
raise ValueError(f"bad seq, expected: {self._recv_seq}, got: {seq}")
|
||||
|
||||
crc = struct.unpack_from("<I", input, length - 4)[0]
|
||||
valid_crc = crc32(memoryview(input)[:-4])
|
||||
valid_crc = crc32(memoryview(input)[: length - 4])
|
||||
if crc != valid_crc:
|
||||
raise ValueError(f"bad crc, expected: {valid_crc}, got: {crc}")
|
||||
|
||||
self._recv_seq += 1
|
||||
output += memoryview(input)[8:-4]
|
||||
output += memoryview(input)[8 : length - 4]
|
||||
return length
|
||||
|
|
|
@ -59,6 +59,15 @@ def test_unpack_normal() -> None:
|
|||
assert input == unpacked
|
||||
|
||||
|
||||
def test_unpack_two_at_once() -> None:
|
||||
transport, input, packed = setup_pack(128)
|
||||
unpacked = bytearray()
|
||||
transport.pack(input, packed)
|
||||
n = transport.unpack(packed[1:] + packed[1:], unpacked)
|
||||
assert input == unpacked
|
||||
assert n == len(packed[1:])
|
||||
|
||||
|
||||
def unpack_large() -> None:
|
||||
transport, input, packed = setup_pack(1024)
|
||||
unpacked = bytearray()
|
||||
|
|
|
@ -73,6 +73,17 @@ def test_unpack_normal() -> None:
|
|||
assert output == expected_output
|
||||
|
||||
|
||||
def test_unpack_two_at_once() -> None:
|
||||
expected_output, transport, input, output = setup_unpack(128)
|
||||
n = transport.unpack(input + input, output)
|
||||
assert output == expected_output
|
||||
assert n == len(input)
|
||||
with raises(ValueError) as e:
|
||||
transport.unpack(input, output)
|
||||
e.match("bad seq")
|
||||
assert output == expected_output
|
||||
|
||||
|
||||
def test_unpack_twice() -> None:
|
||||
transport, input, packed = setup_pack(128)
|
||||
unpacked = bytearray()
|
||||
|
|
|
@ -50,3 +50,12 @@ def test_unpack_normal() -> None:
|
|||
transport.pack(input, packed)
|
||||
transport.unpack(packed[4:], unpacked)
|
||||
assert input == unpacked
|
||||
|
||||
|
||||
def test_unpack_two_at_once() -> None:
|
||||
transport, input, packed = setup_pack(128)
|
||||
unpacked = bytearray()
|
||||
transport.pack(input, packed)
|
||||
n = transport.unpack(packed[4:] + packed[4:], unpacked)
|
||||
assert input == unpacked
|
||||
assert n == len(packed[4:])
|
||||
|
|
Loading…
Reference in New Issue
Block a user