Skip to content
This repository was archived by the owner on Dec 23, 2024. It is now read-only.

Commit ed74895

Browse files
Filter out empty entities internally (#1041)
* Filter out empty entities internally I guess it's fine to handle empty entities internally to avoid ENTITY_BOUNDS_INVALID , so the client won't send the empty entities * revert utils and apply changes to parser/html.py * Update utils.py * Update utils.py * Update utils.py * Update html.py * Update utils.py * Update utils.py Co-authored-by: Dan <14043624+delivrance@users.noreply.github.com>
1 parent d9c8e04 commit ed74895

File tree

2 files changed

+32
-10
lines changed

2 files changed

+32
-10
lines changed

pyrogram/parser/html.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ async def parse(self, text: str):
140140

141141
entities.append(entity)
142142

143+
# Remove zero-length entities
144+
entities = list(filter(lambda x: x.length > 0, entities))
145+
143146
return {
144147
"message": utils.remove_surrogates(parser.text),
145148
"entities": sorted(entities, key=lambda e: e.offset)
@@ -156,13 +159,21 @@ def unparse(text: str, entities: list):
156159
start = entity.offset
157160
end = start + entity.length
158161

159-
if entity_type in (MessageEntityType.BOLD, MessageEntityType.ITALIC, MessageEntityType.UNDERLINE,
160-
MessageEntityType.STRIKETHROUGH):
162+
if entity_type in (
163+
MessageEntityType.BOLD,
164+
MessageEntityType.ITALIC,
165+
MessageEntityType.UNDERLINE,
166+
MessageEntityType.STRIKETHROUGH,
167+
):
161168
name = entity_type.name[0].lower()
162169
start_tag = f"<{name}>"
163170
end_tag = f"</{name}>"
164-
elif entity_type in (MessageEntityType.CODE, MessageEntityType.PRE, MessageEntityType.BLOCKQUOTE,
165-
MessageEntityType.SPOILER):
171+
elif entity_type in (
172+
MessageEntityType.CODE,
173+
MessageEntityType.PRE,
174+
MessageEntityType.BLOCKQUOTE,
175+
MessageEntityType.SPOILER,
176+
):
166177
name = entity_type.name.lower()
167178
start_tag = f"<{name}>"
168179
end_tag = f"</{name}>"

pyrogram/utils.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,10 @@ def get_input_media_from_file_id(
4848
try:
4949
decoded = FileId.decode(file_id)
5050
except Exception:
51-
raise ValueError(f'Failed to decode "{file_id}". The value does not represent an existing local file, '
52-
f'HTTP URL, or valid file id.')
51+
raise ValueError(
52+
f'Failed to decode "{file_id}". The value does not represent an existing local file, '
53+
f"HTTP URL, or valid file id."
54+
)
5355

5456
file_type = decoded.file_type
5557

@@ -82,7 +84,11 @@ def get_input_media_from_file_id(
8284
raise ValueError(f"Unknown file id: {file_id}")
8385

8486

85-
async def parse_messages(client, messages: "raw.types.messages.Messages", replies: int = 1) -> List["types.Message"]:
87+
async def parse_messages(
88+
client,
89+
messages: "raw.types.messages.Messages",
90+
replies: int = 1
91+
) -> List["types.Message"]:
8692
users = {i.id: i for i in messages.users}
8793
chats = {i.id: i for i in messages.chats}
8894

@@ -260,8 +266,10 @@ def xor(a: bytes, b: bytes) -> bytes:
260266
return bytes(i ^ j for i, j in zip(a, b))
261267

262268

263-
def compute_password_hash(algo: raw.types.PasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow,
264-
password: str) -> bytes:
269+
def compute_password_hash(
270+
algo: raw.types.PasswordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow,
271+
password: str
272+
) -> bytes:
265273
hash1 = sha256(algo.salt1 + password.encode() + algo.salt1)
266274
hash2 = sha256(algo.salt2 + hash1 + algo.salt2)
267275
hash3 = hashlib.pbkdf2_hmac("sha512", hash2, algo.salt1, 100000)
@@ -270,7 +278,10 @@ def compute_password_hash(algo: raw.types.PasswordKdfAlgoSHA256SHA256PBKDF2HMACS
270278

271279

272280
# noinspection PyPep8Naming
273-
def compute_password_check(r: raw.types.account.Password, password: str) -> raw.types.InputCheckPasswordSRP:
281+
def compute_password_check(
282+
r: raw.types.account.Password,
283+
password: str
284+
) -> raw.types.InputCheckPasswordSRP:
274285
algo = r.current_algo
275286

276287
p_bytes = algo.p

0 commit comments

Comments
 (0)