From c208b5dc58f86f383860c592c37c9199bcde9d93 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 1 Sep 2021 13:45:32 +0300 Subject: [PATCH] Couple more of crash fixes. --- Telegram/SourceFiles/boxes/stickers_box.cpp | 11 +++++++++-- Telegram/lib_base | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/boxes/stickers_box.cpp b/Telegram/SourceFiles/boxes/stickers_box.cpp index 21b7547e6d..6bfa8ace46 100644 --- a/Telegram/SourceFiles/boxes/stickers_box.cpp +++ b/Telegram/SourceFiles/boxes/stickers_box.cpp @@ -1902,14 +1902,17 @@ void StickersBox::Inner::handleMegagroupSetAddressChange() { void StickersBox::Inner::rebuildMegagroupSet() { Expects(_megagroupSet != nullptr); - if (!_megagroupSetInput.id) { + const auto clearCurrent = [&] { if (_megagroupSelectedSet) { _megagroupSetField->setText(QString()); _megagroupSetField->finishAnimating(); } - _megagroupSelectedSet.reset(); + _megagroupSelectedSet = nullptr; _megagroupSelectedRemove.destroy(); _megagroupSelectedShadow.destroy(); + }; + if (!_megagroupSetInput.id) { + clearCurrent(); return; } auto setId = _megagroupSetInput.id; @@ -1917,6 +1920,10 @@ void StickersBox::Inner::rebuildMegagroupSet() { auto it = sets.find(setId); if (it == sets.cend() || (it->second->flags & SetFlag::NotLoaded)) { + // It may have been in sets and stored in _megagroupSelectedSet + // already, but then removed from sets. We need to clear the stored + // pointer, otherwise we may crash in paint event while loading. + clearCurrent(); session().api().scheduleStickerSetRequest( _megagroupSetInput.id, _megagroupSetInput.accessHash); diff --git a/Telegram/lib_base b/Telegram/lib_base index 9729d6fd98..da56c06574 160000 --- a/Telegram/lib_base +++ b/Telegram/lib_base @@ -1 +1 @@ -Subproject commit 9729d6fd98cc78adfb005f98e20e18bf4aa03b2f +Subproject commit da56c0657473a89843df1d95519d0e94388dcc9b