From aa635a89c2955dc04a7e20704bdcf5ac33725a4e Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 29 Jun 2022 15:57:59 +0300 Subject: [PATCH] Check keyboard buttons data for validness. --- td/telegram/ReplyMarkup.cpp | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/td/telegram/ReplyMarkup.cpp b/td/telegram/ReplyMarkup.cpp index 356ce805d..740bf413b 100644 --- a/td/telegram/ReplyMarkup.cpp +++ b/td/telegram/ReplyMarkup.cpp @@ -223,7 +223,12 @@ static KeyboardButton get_keyboard_button(tl_object_ptr(keyboard_button_ptr); button.type = KeyboardButton::Type::WebView; button.text = std::move(keyboard_button->text_); - button.url = std::move(keyboard_button->url_); + auto r_url = LinkManager::check_link(keyboard_button->url_); + if (r_url.is_error()) { + LOG(ERROR) << "Keyboard Web App " << r_url.error().message(); + return {}; + } + button.url = r_url.move_as_ok(); break; } default: @@ -242,7 +247,12 @@ static InlineKeyboardButton get_inline_keyboard_button( auto keyboard_button = move_tl_object_as(keyboard_button_ptr); button.type = InlineKeyboardButton::Type::Url; button.text = std::move(keyboard_button->text_); - button.data = std::move(keyboard_button->url_); + auto r_url = LinkManager::check_link(keyboard_button->url_); + if (r_url.is_error()) { + LOG(ERROR) << "Inline keyboard " << r_url.error().message(); + return {}; + } + button.data = r_url.move_as_ok(); break; } case telegram_api::keyboardButtonCallback::ID: { @@ -279,8 +289,13 @@ static InlineKeyboardButton get_inline_keyboard_button( button.type = InlineKeyboardButton::Type::UrlAuth; button.id = keyboard_button->button_id_; button.text = std::move(keyboard_button->text_); - button.data = std::move(keyboard_button->url_); button.forward_text = std::move(keyboard_button->fwd_text_); + auto r_url = LinkManager::check_link(keyboard_button->url_); + if (r_url.is_error()) { + LOG(ERROR) << "Inline keyboard Login " << r_url.error().message(); + return {}; + } + button.data = r_url.move_as_ok(); break; } case telegram_api::keyboardButtonUserProfile::ID: { @@ -288,13 +303,22 @@ static InlineKeyboardButton get_inline_keyboard_button( button.type = InlineKeyboardButton::Type::User; button.text = std::move(keyboard_button->text_); button.user_id = UserId(keyboard_button->user_id_); + if (!button.user_id.is_valid()) { + LOG(ERROR) << "Receive " << button.user_id << " in inline keyboard"; + return {}; + } break; } case telegram_api::keyboardButtonWebView::ID: { auto keyboard_button = move_tl_object_as(keyboard_button_ptr); button.type = InlineKeyboardButton::Type::WebView; button.text = std::move(keyboard_button->text_); - button.data = std::move(keyboard_button->url_); + auto r_url = LinkManager::check_link(keyboard_button->url_); + if (r_url.is_error()) { + LOG(ERROR) << "Inline keyboard Web App " << r_url.error().message(); + return {}; + } + button.data = r_url.move_as_ok(); break; } default: