diff options
author | Tamion <[email protected]> | 2024-07-15 12:42:10 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2024-07-15 12:42:10 +0200 |
commit | 8b35adca881414c92efeac9aba91a25ace9ea648 (patch) | |
tree | 5ebce63530725ea91f21b3cc475c66b251bfe492 | |
parent | 9fd5b3cfbd40b2847dec14f53c1b3b68aed46f12 (diff) | |
download | Paper-8b35adca881414c92efeac9aba91a25ace9ea648.tar.gz Paper-8b35adca881414c92efeac9aba91a25ace9ea648.zip |
Fix HelpCommand searching (#11066)
Prevent a IOB exception when querying topic
suggestions on query string `/`.
Additionally hide help topics indices if no topics
are visible to the player requesting them.
-rw-r--r-- | patches/api/0479-Fix-HelpCommand-searching.patch | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/patches/api/0479-Fix-HelpCommand-searching.patch b/patches/api/0479-Fix-HelpCommand-searching.patch new file mode 100644 index 0000000000..beac489e87 --- /dev/null +++ b/patches/api/0479-Fix-HelpCommand-searching.patch @@ -0,0 +1,46 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Tamion <[email protected]> +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. + +diff --git a/src/main/java/org/bukkit/command/defaults/HelpCommand.java b/src/main/java/org/bukkit/command/defaults/HelpCommand.java +index a1699aa93c62f70238822c446326ed46ea71db14..9c63d9dedb08f88eb14cff26ee44d6d101935177 100644 +--- a/src/main/java/org/bukkit/command/defaults/HelpCommand.java ++++ b/src/main/java/org/bukkit/command/defaults/HelpCommand.java +@@ -143,6 +143,7 @@ public class HelpCommand extends BukkitCommand { + 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/src/main/java/org/bukkit/help/IndexHelpTopic.java b/src/main/java/org/bukkit/help/IndexHelpTopic.java +index 88a812d66b7eea7389103b9c2776a8adcfc141c7..74795eb1a5dacaca61ed1c918074e79f2b3d9040 100644 +--- a/src/main/java/org/bukkit/help/IndexHelpTopic.java ++++ b/src/main/java/org/bukkit/help/IndexHelpTopic.java +@@ -49,10 +49,15 @@ public class IndexHelpTopic extends HelpTopic { + 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 |