From 8a1ffe0cbbb253eb3bcb25d9741a39f3c23d3a5e Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 13 Jul 2020 15:34:56 +0300 Subject: [PATCH] Fix remove_invalid_entities. GitOrigin-RevId: 6cad36ac6017dcc3870411129a1b0512f9351d17 --- td/telegram/MessageEntity.cpp | 6 ++---- test/message_entities.cpp | 9 +++++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/td/telegram/MessageEntity.cpp b/td/telegram/MessageEntity.cpp index b63458ed0..c282c3338 100644 --- a/td/telegram/MessageEntity.cpp +++ b/td/telegram/MessageEntity.cpp @@ -3513,11 +3513,9 @@ static std::pair remove_invalid_entities(const string &text, vect int32 last_space_utf16_offset = -1; int32 last_non_whitespace_utf16_offset = -1; + td::remove_if(entities, [](const auto &entity) { return entity.length == 0; }); + for (size_t pos = 0; pos <= text.size(); pos++) { - while (current_entity < entities.size() && utf16_offset >= entities[current_entity].offset && - entities[current_entity].length == 0) { - nested_entities_stack.push_back(&entities[current_entity++]); - } while (!nested_entities_stack.empty()) { auto *entity = nested_entities_stack.back(); auto entity_end = entity->offset + entity->length; diff --git a/test/message_entities.cpp b/test/message_entities.cpp index ec72cfcc3..8b5e659ab 100644 --- a/test/message_entities.cpp +++ b/test/message_entities.cpp @@ -813,6 +813,15 @@ TEST(MessageEntities, fix_formatted_text) { check_fix_formatted_text(text, {{type, 0, 1, "http://telegram.org/"}}, "", {}, true, false, false, true); } } + check_fix_formatted_text("\r ", {{td::MessageEntity::Type::Bold, 0, 2}, {td::MessageEntity::Type::Underline, 0, 1}}, + "", {}, true, false, false, true); + check_fix_formatted_text("a \r", {{td::MessageEntity::Type::Bold, 0, 3}, {td::MessageEntity::Type::Underline, 2, 1}}, + "a ", {{td::MessageEntity::Type::Bold, 0, 2}}, true, false, false, true); + check_fix_formatted_text("a \r ", {{td::MessageEntity::Type::Bold, 0, 4}, {td::MessageEntity::Type::Underline, 2, 1}}, + "a ", {{td::MessageEntity::Type::Bold, 0, 2}}, true, false, false, true); + check_fix_formatted_text( + "a \r b", {{td::MessageEntity::Type::Bold, 0, 5}, {td::MessageEntity::Type::Underline, 2, 1}}, "a b", + {{td::MessageEntity::Type::Bold, 0, 2}, {td::MessageEntity::Type::Bold, 3, 1}}, true, false, false, true); check_fix_formatted_text("a\rbc\r", {{td::MessageEntity::Type::Italic, 0, 1},