From cd97c554651a4940131eec5e694632dc0d084928 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Fri, 14 May 2021 02:44:07 -0400 Subject: fix potential crash when displaying audit log --- windows/guildsettings/auditlogpane.cpp | 82 ++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 39 deletions(-) (limited to 'windows/guildsettings/auditlogpane.cpp') diff --git a/windows/guildsettings/auditlogpane.cpp b/windows/guildsettings/auditlogpane.cpp index d2cbc94..f586459 100644 --- a/windows/guildsettings/auditlogpane.cpp +++ b/windows/guildsettings/auditlogpane.cpp @@ -33,7 +33,11 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { auto label = Gtk::manage(new Gtk::Label); label->set_ellipsize(Pango::ELLIPSIZE_END); - auto user = *discord.GetUser(entry.UserID); + Glib::ustring user_markup = "Unknown User"; + if (entry.UserID.has_value()) { + if (auto user = discord.GetUser(*entry.UserID); user.has_value()) + user_markup = discord.GetUser(*entry.UserID)->GetEscapedBoldString(); + } // spaghetti moment Glib::ustring markup; @@ -41,7 +45,7 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { switch (entry.Type) { case AuditLogActionType::GUILD_UPDATE: { markup = - user.GetEscapedBoldString() + + user_markup + " made changes to " + Glib::Markup::escape_text(guild.Name) + ""; @@ -63,7 +67,7 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { } break; case AuditLogActionType::CHANNEL_CREATE: { const auto type = *entry.GetNewFromKey("type"); - markup = user.GetEscapedBoldString() + + markup = user_markup + " created a " + (type == ChannelType::GUILD_VOICE ? "voice" : "text") + " channel #" + Glib::Markup::escape_text(*entry.GetNewFromKey("name")) + @@ -83,12 +87,12 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { case AuditLogActionType::CHANNEL_UPDATE: { const auto target_channel = discord.GetChannel(entry.TargetID); if (target_channel.has_value()) { - markup = user.GetEscapedBoldString() + + markup = user_markup + " made changes to #" + Glib::Markup::escape_text(*target_channel->Name) + ""; } else { - markup = user.GetEscapedBoldString() + + markup = user_markup + " made changes to <#" + entry.TargetID + ">"; @@ -126,7 +130,7 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { } } break; case AuditLogActionType::CHANNEL_DELETE: { - markup = user.GetEscapedBoldString() + + markup = user_markup + " removed #" + Glib::Markup::escape_text(*entry.GetOldFromKey("name")) + ""; @@ -134,11 +138,11 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { case AuditLogActionType::CHANNEL_OVERWRITE_CREATE: { const auto channel = discord.GetChannel(entry.TargetID); if (channel.has_value()) { - markup = user.GetEscapedBoldString() + + markup = user_markup + " created channel overrides for #" + Glib::Markup::escape_text(*channel->Name) + ""; } else { - markup = user.GetEscapedBoldString() + + markup = user_markup + " created channel overrides for <#" + entry.TargetID + ">"; } @@ -146,11 +150,11 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { case AuditLogActionType::CHANNEL_OVERWRITE_UPDATE: { const auto channel = discord.GetChannel(entry.TargetID); if (channel.has_value()) { - markup = user.GetEscapedBoldString() + + markup = user_markup + " updated channel overrides for #" + Glib::Markup::escape_text(*channel->Name) + ""; } else { - markup = user.GetEscapedBoldString() + + markup = user_markup + " updated channel overrides for <#" + entry.TargetID + ">"; } @@ -158,24 +162,24 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { case AuditLogActionType::CHANNEL_OVERWRITE_DELETE: { const auto channel = discord.GetChannel(entry.TargetID); if (channel.has_value()) { - markup = user.GetEscapedBoldString() + + markup = user_markup + " removed channel overrides for #" + Glib::Markup::escape_text(*channel->Name) + ""; } else { - markup = user.GetEscapedBoldString() + + markup = user_markup + " removed channel overrides for <#" + entry.TargetID + ">"; } } break; case AuditLogActionType::MEMBER_KICK: { const auto target_user = discord.GetUser(entry.TargetID); - markup = user.GetEscapedBoldString() + + markup = user_markup + " kicked " + target_user->GetEscapedString() + ""; } break; case AuditLogActionType::MEMBER_PRUNE: { - markup = user.GetEscapedBoldString() + + markup = user_markup + " pruned " + *entry.Options->MembersRemoved + " members"; @@ -185,21 +189,21 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { } break; case AuditLogActionType::MEMBER_BAN_ADD: { const auto target_user = discord.GetUser(entry.TargetID); - markup = user.GetEscapedBoldString() + + markup = user_markup + " banned " + target_user->GetEscapedString() + ""; } break; case AuditLogActionType::MEMBER_BAN_REMOVE: { const auto target_user = discord.GetUser(entry.TargetID); - markup = user.GetEscapedBoldString() + + markup = user_markup + " removed the ban for " + target_user->GetEscapedString() + ""; } break; case AuditLogActionType::MEMBER_UPDATE: { const auto target_user = discord.GetUser(entry.TargetID); - markup = user.GetEscapedBoldString() + + markup = user_markup + " updated " + target_user->GetEscapedString() + ""; @@ -221,7 +225,7 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { } break; case AuditLogActionType::MEMBER_ROLE_UPDATE: { const auto target_user = discord.GetUser(entry.TargetID); - markup = user.GetEscapedBoldString() + + markup = user_markup + " updated roles for " + target_user->GetEscapedString() + ""; if (entry.Changes.has_value()) @@ -239,7 +243,7 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { } break; case AuditLogActionType::MEMBER_MOVE: { const auto channel = discord.GetChannel(*entry.Options->ChannelID); - markup = user.GetEscapedBoldString() + + markup = user_markup + " moved " + *entry.Options->Count + " user" + @@ -249,27 +253,27 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { ""; } break; case AuditLogActionType::MEMBER_DISCONNECT: { - markup = user.GetEscapedBoldString() + + markup = user_markup + " disconnected " + *entry.Options->Count + " users from voice"; } break; case AuditLogActionType::BOT_ADD: { const auto target_user = discord.GetUser(entry.TargetID); - markup = user.GetEscapedBoldString() + + markup = user_markup + " added " + target_user->GetEscapedString() + " to the server"; } break; case AuditLogActionType::ROLE_CREATE: { - markup = user.GetEscapedBoldString() + + markup = user_markup + " created the role " + *entry.GetNewFromKey("name") + ""; } break; case AuditLogActionType::ROLE_UPDATE: { const auto role = discord.GetRole(entry.TargetID); - markup = user.GetEscapedBoldString() + + markup = user_markup + " updated the role " + (role.has_value() ? Glib::Markup::escape_text(role->Name) : Glib::ustring(entry.TargetID)) + ""; @@ -297,14 +301,14 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { } } break; case AuditLogActionType::ROLE_DELETE: { - markup = user.GetEscapedBoldString() + + markup = user_markup + " deleted the role " + *entry.GetOldFromKey("name") + ""; } break; case AuditLogActionType::INVITE_CREATE: { const auto code = *entry.GetNewFromKey("code"); - markup = user.GetEscapedBoldString() + + markup = user_markup + " created an invite " + code + ""; if (entry.Changes.has_value()) for (const auto &change : *entry.Changes) { @@ -328,13 +332,13 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { } } break; case AuditLogActionType::INVITE_DELETE: { - markup = user.GetEscapedBoldString() + + markup = user_markup + " deleted an invite " + *entry.GetOldFromKey("code") + ""; } break; case AuditLogActionType::WEBHOOK_CREATE: { - markup = user.GetEscapedBoldString() + + markup = user_markup + " created the webhook " + Glib::Markup::escape_text(*entry.GetNewFromKey("name")) + ""; @@ -356,12 +360,12 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { webhookptr = &webhook; } if (webhookptr != nullptr) { - markup = user.GetEscapedBoldString() + + markup = user_markup + " updated the webhook " + Glib::Markup::escape_text(webhookptr->Name) + ""; } else { - markup = user.GetEscapedBoldString() + + markup = user_markup + " updated a webhook"; } if (entry.Changes.has_value()) @@ -385,19 +389,19 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { } } break; case AuditLogActionType::WEBHOOK_DELETE: { - markup = user.GetEscapedBoldString() + + markup = user_markup + " deleted the webhook " + Glib::Markup::escape_text(*entry.GetOldFromKey("name")) + ""; } break; case AuditLogActionType::EMOJI_CREATE: { - markup = user.GetEscapedBoldString() + + markup = user_markup + " created the emoji " + Glib::Markup::escape_text(*entry.GetNewFromKey("name")) + ""; } break; case AuditLogActionType::EMOJI_UPDATE: { - markup = user.GetEscapedBoldString() + + markup = user_markup + " updated the emoji " + Glib::Markup::escape_text(*entry.GetOldFromKey("name")) + ""; @@ -408,7 +412,7 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { ""); } break; case AuditLogActionType::EMOJI_DELETE: { - markup = user.GetEscapedBoldString() + + markup = user_markup + " deleted the emoji " + Glib::Markup::escape_text(*entry.GetOldFromKey("name")) + ""; @@ -417,26 +421,26 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { const auto channel = discord.GetChannel(*entry.Options->ChannelID); const auto count = *entry.Options->Count; if (channel.has_value()) { - markup = user.GetEscapedBoldString() + + markup = user_markup + " deleted " + count + " messages in #" + Glib::Markup::escape_text(*channel->Name) + ""; } else { - markup = user.GetEscapedBoldString() + + markup = user_markup + " deleted " + count + " messages"; } } break; case AuditLogActionType::MESSAGE_BULK_DELETE: { const auto channel = discord.GetChannel(entry.TargetID); if (channel.has_value()) { - markup = user.GetEscapedBoldString() + + markup = user_markup + " deleted " + *entry.Options->Count + " messages in #" + Glib::Markup::escape_text(*channel->Name) + ""; } else { - markup = user.GetEscapedBoldString() + + markup = user_markup + " deleted " + *entry.Options->Count + " messages"; @@ -444,14 +448,14 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { } break; case AuditLogActionType::MESSAGE_PIN: { const auto target_user = discord.GetUser(entry.TargetID); - markup = user.GetEscapedBoldString() + + markup = user_markup + " pinned a message by " + target_user->GetEscapedString() + ""; } break; case AuditLogActionType::MESSAGE_UNPIN: { const auto target_user = discord.GetUser(entry.TargetID); - markup = user.GetEscapedBoldString() + + markup = user_markup + " unpinned a message by " + target_user->GetEscapedString() + ""; -- cgit v1.2.3