From 4a53cfe7ac220be16ba7591a0fa80dd5ec4a196a Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sat, 9 Jul 2022 19:24:04 -0400 Subject: [PATCH] Prevent role snowflakes from resolving roles with ids as names (#4983) Fixes #4981. --- .../java/com/earth2me/essentials/utils/NumberUtil.java | 9 +++++++++ .../java/net/essentialsx/discord/util/DiscordUtil.java | 4 +++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java index e1d376b7e..38b464344 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java @@ -120,6 +120,15 @@ public final class NumberUtil { return Integer.parseInt(sInt) > 0; } + public static boolean isNumeric(final String sNum) { + for (final char sChar : sNum.toCharArray()) { + if (!Character.isDigit(sChar)) { + return false; + } + } + return true; + } + /** * Backport from Guava. */ diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java index c7cf17821..dfe953662 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/util/DiscordUtil.java @@ -5,6 +5,7 @@ import club.minnced.discord.webhook.WebhookClientBuilder; import club.minnced.discord.webhook.send.AllowedMentions; import com.earth2me.essentials.utils.DownsampleUtil; import com.earth2me.essentials.utils.FormatUtil; +import com.earth2me.essentials.utils.NumberUtil; import com.earth2me.essentials.utils.VersionUtil; import com.google.common.collect.ImmutableList; import net.dv8tion.jda.api.Permission; @@ -181,13 +182,14 @@ public final class DiscordUtil { final List roles = member.getRoles(); for (String roleDefinition : roleDefinitions) { roleDefinition = roleDefinition.trim(); + final boolean id = NumberUtil.isNumeric(roleDefinition); if (roleDefinition.equals("*") || member.getId().equals(roleDefinition)) { return true; } for (final Role role : roles) { - if (role.getId().equals(roleDefinition) || role.getName().equalsIgnoreCase(roleDefinition)) { + if (role.getId().equals(roleDefinition) || (!id && role.getName().equalsIgnoreCase(roleDefinition))) { return true; } }