From f66e6879c2b7406e80416173e0c863cf2e517932 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 17 Mar 2023 19:24:48 +0400 Subject: [PATCH] Fix possible crash in messages forwarding. Regression was introduced in 2c1e7bfcb6. --- Telegram/SourceFiles/boxes/share_box.cpp | 11 ++++++----- Telegram/SourceFiles/window/window_peer_menu.cpp | 6 +++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Telegram/SourceFiles/boxes/share_box.cpp b/Telegram/SourceFiles/boxes/share_box.cpp index 548edf1fd2..124f43e36e 100644 --- a/Telegram/SourceFiles/boxes/share_box.cpp +++ b/Telegram/SourceFiles/boxes/share_box.cpp @@ -1343,8 +1343,9 @@ ShareBox::SubmitCallback ShareBox::DefaultForwardCallback( if (!state->requests.empty()) { return; // Share clicked already. } - auto items = history->owner().idsToItems(msgIds); - if (items.empty() || result.empty()) { + const auto items = history->owner().idsToItems(msgIds); + const auto existingIds = history->owner().itemsToIds(items); + if (existingIds.empty() || result.empty()) { return; } @@ -1384,12 +1385,12 @@ ShareBox::SubmitCallback ShareBox::DefaultForwardCallback( ? Flag::f_drop_media_captions : Flag(0)); auto mtpMsgIds = QVector(); - mtpMsgIds.reserve(msgIds.size()); - for (const auto &fullId : msgIds) { + mtpMsgIds.reserve(existingIds.size()); + for (const auto &fullId : existingIds) { mtpMsgIds.push_back(MTP_int(fullId.msg)); } const auto generateRandom = [&] { - auto result = QVector(msgIds.size()); + auto result = QVector(existingIds.size()); for (auto &value : result) { value = base::RandomValue(); } diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index 7dceba8377..bea338031a 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -1656,7 +1656,11 @@ QPointer ShowForwardMessagesBox( not_null navigation, Data::ForwardDraft &&draft, Fn &&successCallback) { - const auto msgIds = draft.ids; + const auto owner = &navigation->session().data(); + const auto msgIds = owner->itemsToIds(owner->idsToItems(draft.ids)); + if (msgIds.empty()) { + return nullptr; + } class ListBox final : public PeerListBox { public: