summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorzml2008 <zach@zachsthings.com>2012-03-20 19:12:14 -0700
committerEvilSeph <evilseph@gmail.com>2012-03-22 00:50:09 -0400
commit31b1bc02ca968d7282c7fdc734e67b23d6ee93e5 (patch)
tree73878a848a45e1d36b53ab368ac23aa7f7379844 /src
parent8aee4c3f563f8a6e5e2f5b3233c25097487bf6c4 (diff)
downloadcraftbukkit-31b1bc02ca968d7282c7fdc734e67b23d6ee93e5.tar
craftbukkit-31b1bc02ca968d7282c7fdc734e67b23d6ee93e5.tar.gz
craftbukkit-31b1bc02ca968d7282c7fdc734e67b23d6ee93e5.tar.lz
craftbukkit-31b1bc02ca968d7282c7fdc734e67b23d6ee93e5.tar.xz
craftbukkit-31b1bc02ca968d7282c7fdc734e67b23d6ee93e5.zip
[Bleeding] Fixed a StackOverflowError with command alias handling for Help. Addresses BUKKIT-1253
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/help/CommandAliasHelpTopic.java2
-rw-r--r--src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java20
2 files changed, 13 insertions, 9 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/help/CommandAliasHelpTopic.java b/src/main/java/org/bukkit/craftbukkit/help/CommandAliasHelpTopic.java
index 8830462f..4dcfef1c 100644
--- a/src/main/java/org/bukkit/craftbukkit/help/CommandAliasHelpTopic.java
+++ b/src/main/java/org/bukkit/craftbukkit/help/CommandAliasHelpTopic.java
@@ -1,5 +1,6 @@
package org.bukkit.craftbukkit.help;
+import org.apache.commons.lang.Validate;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.help.HelpMap;
@@ -14,6 +15,7 @@ public class CommandAliasHelpTopic extends HelpTopic {
this.aliasFor = aliasFor.startsWith("/") ? aliasFor : "/" + aliasFor;
this.helpMap = helpMap;
this.name = alias.startsWith("/") ? alias : "/" + alias;
+ Validate.isTrue(!this.name.equals(this.aliasFor), "Command " + this.name + " cannot be alias for itself");
this.shortText = ChatColor.YELLOW + "Alias for " + ChatColor.WHITE + this.aliasFor;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java b/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java
index ec25c351..cdde69ce 100644
--- a/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java
+++ b/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java
@@ -16,10 +16,10 @@ import java.util.*;
* Standard implementation of {@link HelpMap} for CraftBukkit servers.
*/
public class SimpleHelpMap implements HelpMap {
-
+
private final HelpTopic defaultTopic;
private final Map<String, HelpTopic> helpTopics;
- private final Set<HelpTopic> pluginIndexes;
+ private final Set<HelpTopic> pluginIndexes;
private final Map<Class, HelpTopicFactory<Command>> topicFactoryMap;
private final CraftServer server;
private HelpYamlReader yaml;
@@ -40,7 +40,7 @@ public class SimpleHelpMap implements HelpMap {
registerHelpTopicFactory(MultipleCommandAlias.class, new MultipleCommandAliasHelpTopicFactory());
}
-
+
public synchronized HelpTopic getHelpTopic(String topicName) {
if (topicName.equals("")) {
return defaultTopic;
@@ -112,14 +112,16 @@ public class SimpleHelpMap implements HelpMap {
}
addTopic(new GenericCommandHelpTopic(command));
}
-
+
// Initialize command alias help topics
for (Command command : server.getCommandMap().getCommands()) {
if (commandInIgnoredPlugin(command, ignoredPlugins)) {
continue;
}
for (String alias : command.getAliases()) {
- addTopic(new CommandAliasHelpTopic(alias, command.getLabel(), this));
+ if (!helpTopics.containsKey("/" + alias)) {
+ addTopic(new CommandAliasHelpTopic("/" + alias, "/" + command.getLabel(), this));
+ }
}
}
@@ -132,7 +134,7 @@ public class SimpleHelpMap implements HelpMap {
// Add alias sub-index
addTopic(new IndexHelpTopic("Aliases", "Lists command aliases", null, Collections2.filter(helpTopics.values(), Predicates.instanceOf(CommandAliasHelpTopic.class))));
-
+
// Initialize plugin-level sub-topics
Map<String, Set<HelpTopic>> pluginIndexes = new HashMap<String, Set<HelpTopic>>();
fillPluginIndexes(pluginIndexes, server.getCommandMap().getCommands());
@@ -152,7 +154,7 @@ public class SimpleHelpMap implements HelpMap {
}
}
}
-
+
private void fillPluginIndexes(Map<String, Set<HelpTopic>> pluginIndexes, Collection<? extends Command> commands) {
for (Command command : commands) {
String pluginName = getCommandPluginName(command);
@@ -167,7 +169,7 @@ public class SimpleHelpMap implements HelpMap {
}
}
}
-
+
private String getCommandPluginName(Command command) {
if (command instanceof BukkitCommand || command instanceof VanillaCommand) {
return "Bukkit";
@@ -177,7 +179,7 @@ public class SimpleHelpMap implements HelpMap {
}
return null;
}
-
+
private boolean commandInIgnoredPlugin(Command command, Set<String> ignoredPlugins) {
if ((command instanceof BukkitCommand || command instanceof VanillaCommand) && ignoredPlugins.contains("Bukkit")) {
return true;