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