From 7507d0f1ef4492a864b8971311aeec4e1a9815ac Mon Sep 17 00:00:00 2001 From: Tamion <70228790+notTamion@users.noreply.github.com> Date: Sat, 13 Jul 2024 18:00:37 +0200 Subject: [PATCH] Fix HelpCommand searching Prevent index out of bounds exception when finding possible matches in the help topics. A general empty string is caught and directed to the defaultTopic by getHelpTopic(). #findPossibleMatches hence should not concern itself with possible empty strings anymore. --- .../java/org/bukkit/command/defaults/HelpCommand.java | 1 + .../src/main/java/org/bukkit/help/IndexHelpTopic.java | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/command/defaults/HelpCommand.java b/paper-api/src/main/java/org/bukkit/command/defaults/HelpCommand.java index a1699aa93c62..9c63d9dedb08 100644 --- a/paper-api/src/main/java/org/bukkit/command/defaults/HelpCommand.java +++ b/paper-api/src/main/java/org/bukkit/command/defaults/HelpCommand.java @@ -143,6 +143,7 @@ protected HelpTopic findPossibleMatches(@NotNull String searchString) { searchString = searchString.substring(1); } + if (searchString.isEmpty()) return null; // Paper - prevent index out of bounds - nothing matches an empty search string, should have been special cased to defaultTopic earlier, just return null. for (HelpTopic topic : Bukkit.getServer().getHelpMap().getHelpTopics()) { String trimmedTopic = topic.getName().startsWith("/") ? topic.getName().substring(1) : topic.getName(); diff --git a/paper-api/src/main/java/org/bukkit/help/IndexHelpTopic.java b/paper-api/src/main/java/org/bukkit/help/IndexHelpTopic.java index 88a812d66b7e..74795eb1a5da 100644 --- a/paper-api/src/main/java/org/bukkit/help/IndexHelpTopic.java +++ b/paper-api/src/main/java/org/bukkit/help/IndexHelpTopic.java @@ -49,10 +49,15 @@ public boolean canSee(@NotNull CommandSender sender) { if (sender instanceof ConsoleCommandSender) { return true; } - if (permission == null) { - return true; + // Paper start - Fix HelpCommand searching - do not show index if no topic is visible to the sender + if (permission != null && !sender.hasPermission(permission)) return false; // old spigot permission check + + for (HelpTopic topic : allTopics) { + if (topic.canSee(sender)) return true; } - return sender.hasPermission(permission); + + return false; + // Paper end - Fix HelpCommand searching - do not show index if no topic is visible to the sender } @Override