From e1709c11da46cc72c343dc90a3fd222c4cb21333 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 5 Jul 2017 12:37:00 +0300 Subject: [PATCH] Check weak pointer in AddParticipantBoxController. This may fix some crashes. --- .../profile/profile_channel_controllers.cpp | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/Telegram/SourceFiles/profile/profile_channel_controllers.cpp b/Telegram/SourceFiles/profile/profile_channel_controllers.cpp index 4847de1ed9..b818234d75 100644 --- a/Telegram/SourceFiles/profile/profile_channel_controllers.cpp +++ b/Telegram/SourceFiles/profile/profile_channel_controllers.cpp @@ -633,7 +633,11 @@ void AddParticipantBoxController::editAdmin(gsl::not_null user, bool if (_channel->canAddMembers()) { if (_channel->canBanMembers()) { if (!sure) { - _editBox = Ui::show(Box(lang(lng_sure_add_admin_unban), [weak, user] { weak->editAdmin(user, true); }), KeepOtherLayers); + _editBox = Ui::show(Box(lang(lng_sure_add_admin_unban), [weak, user] { + if (weak) { + weak->editAdmin(user, true); + } + }), KeepOtherLayers); return; } } else { @@ -648,7 +652,11 @@ void AddParticipantBoxController::editAdmin(gsl::not_null user, bool // The user is restricted. if (_channel->canBanMembers()) { if (!sure) { - _editBox = Ui::show(Box(lang(lng_sure_add_admin_unban), [weak, user] { weak->editAdmin(user, true); }), KeepOtherLayers); + _editBox = Ui::show(Box(lang(lng_sure_add_admin_unban), [weak, user] { + if (weak) { + weak->editAdmin(user, true); + } + }), KeepOtherLayers); return; } } else { @@ -659,7 +667,11 @@ void AddParticipantBoxController::editAdmin(gsl::not_null user, bool // The user is not in the group yet. if (_channel->canAddMembers()) { if (!sure) { - _editBox = Ui::show(Box(lang(lng_sure_add_admin_invite), [weak, user] { weak->editAdmin(user, true); }), KeepOtherLayers); + _editBox = Ui::show(Box(lang(lng_sure_add_admin_invite), [weak, user] { + if (weak) { + weak->editAdmin(user, true); + } + }), KeepOtherLayers); return; } } else { @@ -733,7 +745,11 @@ void AddParticipantBoxController::editRestricted(gsl::not_null user, if (_additional.adminCanEdit.find(user) != _additional.adminCanEdit.end()) { hasAdminRights = true; if (!sure) { - _editBox = Ui::show(Box(lang(lng_sure_ban_admin), [weak, user] { weak->editRestricted(user, true); }), KeepOtherLayers); + _editBox = Ui::show(Box(lang(lng_sure_ban_admin), [weak, user] { + if (weak) { + weak->editRestricted(user, true); + } + }), KeepOtherLayers); return; } } else { @@ -793,7 +809,11 @@ void AddParticipantBoxController::kickUser(gsl::not_null user, bool s // The user is an admin or creator. if (_additional.adminCanEdit.find(user) != _additional.adminCanEdit.end()) { if (!sure) { - _editBox = Ui::show(Box(lang(lng_sure_ban_admin), [weak, user] { weak->kickUser(user, true); }), KeepOtherLayers); + _editBox = Ui::show(Box(lang(lng_sure_ban_admin), [weak, user] { + if (weak) { + weak->kickUser(user, true); + } + }), KeepOtherLayers); return; } } else { @@ -805,7 +825,11 @@ void AddParticipantBoxController::kickUser(gsl::not_null user, bool s // Finally kick him. if (!sure) { auto text = lng_sure_ban_user_group(lt_user, App::peerName(user)); - _editBox = Ui::show(Box(text, [weak, user] { weak->kickUser(user, true); }), KeepOtherLayers); + _editBox = Ui::show(Box(text, [weak, user] { + if (weak) { + weak->kickUser(user, true); + } + }), KeepOtherLayers); return; } restrictUserSure(user, ChannelData::KickedRestrictedRights());