diff --git a/td/telegram/MessageContent.cpp b/td/telegram/MessageContent.cpp index 1053a1c3f..46d2ef28a 100644 --- a/td/telegram/MessageContent.cpp +++ b/td/telegram/MessageContent.cpp @@ -1137,6 +1137,7 @@ static void parse_caption(FormattedText &caption, ParserT &parser) { parse(caption.text, parser); if (parser.version() >= static_cast(Version::AddCaptionEntities)) { parse(caption.entities, parser); + remove_empty_entities(caption.entities); } else { if (!check_utf8(caption.text)) { caption.text.clear(); diff --git a/td/telegram/MessageEntity.cpp b/td/telegram/MessageEntity.cpp index 94b990380..c1318430a 100644 --- a/td/telegram/MessageEntity.cpp +++ b/td/telegram/MessageEntity.cpp @@ -1405,6 +1405,10 @@ vector> find_media_timestamps(Slice str) { return result; } +void remove_empty_entities(vector &entities) { + td::remove_if(entities, [](const auto &entity) { return entity.length == 0; }); +} + static int32 text_length(Slice text) { return narrow_cast(utf8_utf16_length(text)); } @@ -2566,7 +2570,7 @@ static FormattedText parse_markdown_v3_without_pre(Slice text, vector remove_invalid_entities(const string &text, vect int32 utf16_offset = 0; int32 last_non_whitespace_utf16_offset = -1; - td::remove_if(entities, [](const auto &entity) { return entity.length == 0; }); + remove_empty_entities(entities); for (size_t pos = 0; pos <= text.size(); pos++) { while (!nested_entities_stack.empty()) { @@ -3924,7 +3928,7 @@ static std::pair remove_invalid_entities(const string &text, vect CHECK(nested_entities_stack.empty()); CHECK(current_entity == entities.size()); - td::remove_if(entities, [](const auto &entity) { return entity.length == 0; }); + remove_empty_entities(entities); return {last_non_whitespace_pos, last_non_whitespace_utf16_offset}; } @@ -4114,7 +4118,7 @@ Status fix_formatted_text(string &text, vector &entities, bool al return Status::Error(400, PSLICE() << "Receive an entity with incorrect length " << entity.length); } } - td::remove_if(entities, [](const MessageEntity &entity) { return entity.length == 0; }); + remove_empty_entities(entities); fix_entities(entities); diff --git a/td/telegram/MessageEntity.h b/td/telegram/MessageEntity.h index cb9684d1d..8e85fa6c2 100644 --- a/td/telegram/MessageEntity.h +++ b/td/telegram/MessageEntity.h @@ -168,6 +168,8 @@ bool is_email_address(Slice str); vector> find_urls(Slice str); // slice + is_email_address vector> find_media_timestamps(Slice str); // slice + media_timestamp +void remove_empty_entities(vector &entities); + string get_first_url(Slice text, const vector &entities); Result> parse_markdown(string &text); diff --git a/td/telegram/MessageEntity.hpp b/td/telegram/MessageEntity.hpp index 3d8a8214d..784bc39b2 100644 --- a/td/telegram/MessageEntity.hpp +++ b/td/telegram/MessageEntity.hpp @@ -62,6 +62,7 @@ template void FormattedText::parse(ParserT &parser) { td::parse(text, parser); td::parse(entities, parser); + remove_empty_entities(entities); } } // namespace td