From 55f3a14343878d018773afb4a1bb63fda01d6b5b Mon Sep 17 00:00:00 2001 From: vemacs Date: Sun, 29 Nov 2015 17:01:19 -0700 Subject: [PATCH] Fix EconomyTest passing --- .../src/com/earth2me/essentials/UserMap.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/UserMap.java b/Essentials/src/com/earth2me/essentials/UserMap.java index cc43685c2..be27a7805 100644 --- a/Essentials/src/com/earth2me/essentials/UserMap.java +++ b/Essentials/src/com/earth2me/essentials/UserMap.java @@ -15,6 +15,7 @@ import java.util.*; import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ConcurrentSkipListSet; import java.util.concurrent.ExecutionException; +import java.util.regex.Pattern; public class UserMap extends CacheLoader implements IConf { @@ -223,11 +224,27 @@ public class UserMap extends CacheLoader implements IConf { // } // } + private final Pattern validUserPattern = Pattern.compile("^[a-zA-Z0-9_]{2,16}$"); + @SuppressWarnings("deprecation") private UUID getIdFromBukkit(String name) { ess.getLogger().warning("Using potentially blocking Bukkit UUID lookup for: " + name); - UUID uuid = Bukkit.getOfflinePlayer(name).getUniqueId(); - if (uuid.equals(UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8)))) { + // Don't attempt to look up entirely invalid usernames + if (name == null || !validUserPattern.matcher(name).matches()) { + return null; + } + org.bukkit.OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(name); + if (offlinePlayer == null) { + return null; + } + UUID uuid; + try { + uuid = offlinePlayer.getUniqueId(); + } catch (UnsupportedOperationException | NullPointerException e) { + return null; + } + // This is how Bukkit generates fake UUIDs + if (UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8)).equals(uuid)) { return null; } else { return uuid;