mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-08-08 04:52:30 +00:00
Avoid storing memoryview in deserialized objects
This commit is contained in:
@@ -31,17 +31,17 @@ def _bootstrap_get_ty(constructor_id: int) -> Optional[Type["Serializable"]]:
|
||||
class Reader:
|
||||
__slots__ = ("_view", "_pos", "_len")
|
||||
|
||||
def __init__(self, buffer: bytes) -> None:
|
||||
def __init__(self, buffer: bytes | memoryview) -> None:
|
||||
self._view = (
|
||||
memoryview(buffer) if not isinstance(buffer, memoryview) else buffer
|
||||
)
|
||||
self._pos = 0
|
||||
self._len = len(self._view)
|
||||
|
||||
def read_remaining(self) -> bytes:
|
||||
def read_remaining(self) -> memoryview:
|
||||
return self.read(self._len - self._pos)
|
||||
|
||||
def read(self, n: int) -> bytes:
|
||||
def read(self, n: int) -> memoryview:
|
||||
self._pos += n
|
||||
assert self._pos <= self._len
|
||||
return self._view[self._pos - n : self._pos]
|
||||
@@ -52,7 +52,7 @@ class Reader:
|
||||
assert self._pos <= self._len
|
||||
return struct.unpack(fmt, self._view[self._pos - size : self._pos])
|
||||
|
||||
def read_bytes(self) -> bytes:
|
||||
def read_bytes(self) -> memoryview:
|
||||
if self._view[self._pos] == 254:
|
||||
self._pos += 4
|
||||
length = struct.unpack("<i", self._view[self._pos - 4 : self._pos])[0] >> 8
|
||||
|
@@ -36,10 +36,6 @@ class Serializable(abc.ABC):
|
||||
|
||||
def __repr__(self) -> str:
|
||||
fields = ((attr, getattr(self, attr)) for attr in self.__slots__)
|
||||
fields = (
|
||||
(name, bytes(field) if isinstance(field, memoryview) else field)
|
||||
for name, field in fields
|
||||
)
|
||||
attrs = ", ".join(f"{name}={field!r}" for name, field in fields)
|
||||
return f"{self.__class__.__name__}({attrs})"
|
||||
|
||||
|
Reference in New Issue
Block a user