From 03773d01fde606ce630578cef43a1e4f5dec4e89 Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 22 Jul 2022 16:11:33 +0300 Subject: [PATCH] Disallow emoji stickers in secret chats. --- td/telegram/MessageContent.cpp | 8 ++++++-- td/telegram/MessageContent.h | 3 +++ td/telegram/MessagesManager.cpp | 8 ++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/td/telegram/MessageContent.cpp b/td/telegram/MessageContent.cpp index fe77b5d72..b92ec804e 100644 --- a/td/telegram/MessageContent.cpp +++ b/td/telegram/MessageContent.cpp @@ -2715,8 +2715,7 @@ Status can_send_message_content(DialogId dialog_id, const MessageContent *conten if (!permissions.can_send_stickers()) { return Status::Error(400, "Not enough rights to send stickers to the chat"); } - if (td->stickers_manager_->get_sticker_type(static_cast(content)->file_id) == - StickerType::CustomEmoji) { + if (get_message_content_sticker_type(td, content) == StickerType::CustomEmoji) { return Status::Error(400, "Can't send emoji stickers in messages"); } break; @@ -2927,6 +2926,11 @@ int32 get_message_content_index_mask(const MessageContent *content, const Td *td return get_message_content_text_index_mask(content) | get_message_content_media_index_mask(content, td, is_outgoing); } +StickerType get_message_content_sticker_type(const Td *td, const MessageContent *content) { + CHECK(content->get_type() == MessageContentType::Sticker); + return td->stickers_manager_->get_sticker_type(static_cast(content)->file_id); +} + MessageId get_message_content_pinned_message_id(const MessageContent *content) { switch (content->get_type()) { case MessageContentType::PinMessage: diff --git a/td/telegram/MessageContent.h b/td/telegram/MessageContent.h index af75dcc53..3ec51b2b1 100644 --- a/td/telegram/MessageContent.h +++ b/td/telegram/MessageContent.h @@ -20,6 +20,7 @@ #include "td/telegram/ReplyMarkup.h" #include "td/telegram/secret_api.h" #include "td/telegram/SecretInputMedia.h" +#include "td/telegram/StickerType.h" #include "td/telegram/td_api.h" #include "td/telegram/telegram_api.h" #include "td/telegram/TopDialogCategory.h" @@ -131,6 +132,8 @@ bool update_opened_message_content(MessageContent *content); int32 get_message_content_index_mask(const MessageContent *content, const Td *td, bool is_outgoing); +StickerType get_message_content_sticker_type(const Td *td, const MessageContent *content); + MessageId get_message_content_pinned_message_id(const MessageContent *content); string get_message_content_theme_name(const MessageContent *content); diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index df96e3712..4a098c861 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -56,6 +56,7 @@ #include "td/telegram/ReplyMarkup.hpp" #include "td/telegram/SecretChatsManager.h" #include "td/telegram/SponsoredMessageManager.h" +#include "td/telegram/StickerType.h" #include "td/telegram/Td.h" #include "td/telegram/TdDb.h" #include "td/telegram/TdParameters.h" @@ -14378,6 +14379,13 @@ std::pair> MessagesManager::creat } auto content_type = message_info.content->get_type(); + if (content_type == MessageContentType::Sticker && + get_message_content_sticker_type(td_, message_info.content.get()) == StickerType::CustomEmoji) { + LOG(INFO) << "Replace emoji sticker with an empty message"; + message_info.content = create_text_message_content("Invalid sticker", {}, WebPageId()); + content_type = message_info.content->get_type(); + } + if (hide_edit_date && td_->auth_manager_->is_bot()) { hide_edit_date = false; }