aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTamion <[email protected]>2024-07-15 12:42:10 +0200
committerGitHub <[email protected]>2024-07-15 12:42:10 +0200
commit8b35adca881414c92efeac9aba91a25ace9ea648 (patch)
tree5ebce63530725ea91f21b3cc475c66b251bfe492
parent9fd5b3cfbd40b2847dec14f53c1b3b68aed46f12 (diff)
downloadPaper-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.patch46
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