From babb66d3e06c5df025dcac04da6b0783759721c4 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 2 Nov 2021 18:30:11 +0300 Subject: [PATCH] Fix processing of empty messages. --- td/telegram/MessagesManager.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 76a6ae3b6..c67d3e100 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -464,14 +464,16 @@ class GetMessagesQuery final : public Td::ResultHandler { class GetChannelMessagesQuery final : public Td::ResultHandler { Promise promise_; ChannelId channel_id_; + MessageId last_new_message_id_; public: explicit GetChannelMessagesQuery(Promise &&promise) : promise_(std::move(promise)) { } void send(ChannelId channel_id, tl_object_ptr &&input_channel, - vector> &&message_ids) { + vector> &&message_ids, MessageId last_new_message_id) { channel_id_ = channel_id; + last_new_message_id_ = last_new_message_id; CHECK(input_channel != nullptr); send_query(G()->net_query_creator().create( telegram_api::channels_getMessages(std::move(input_channel), std::move(message_ids)))); @@ -485,12 +487,14 @@ class GetChannelMessagesQuery final : public Td::ResultHandler { auto info = td->messages_manager_->get_messages_info(result_ptr.move_as_ok(), "GetChannelMessagesQuery"); LOG_IF(ERROR, !info.is_channel_messages) << "Receive ordinary messages in GetChannelMessagesQuery"; - if (!td->auth_manager_->is_bot()) { // bots can receive messageEmpty because of their privacy mode + // messages with invalid big identifiers can be received as messageEmpty + // bots can receive messageEmpty because of their privacy mode + if (last_new_message_id_.is_valid() && !td->auth_manager_->is_bot()) { vector empty_message_ids; for (auto &message : info.messages) { if (message->get_id() == telegram_api::messageEmpty::ID) { auto message_id = MessagesManager::get_message_id(message, false); - if (message_id.is_valid()) { + if (message_id.is_valid() && message_id <= last_new_message_id_) { empty_message_ids.push_back(message_id); } } @@ -17856,8 +17860,10 @@ void MessagesManager::get_messages_from_server(vector &&message_i mpas.get_promise().set_error(Status::Error(400, "Can't access the chat")); continue; } + const auto *d = get_dialog_force(DialogId(it.first)); td_->create_handler(mpas.get_promise()) - ->send(it.first, std::move(input_channel), std::move(it.second)); + ->send(it.first, std::move(input_channel), std::move(it.second), + d == nullptr ? MessageId() : d->last_new_message_id); } lock.set_value(Unit()); }