From ba8511cbcb0cc3221c63fc6705b61c6ee6f16a76 Mon Sep 17 00:00:00 2001 From: Frank van der Heijden Date: Fri, 8 Oct 2021 14:21:58 +0200 Subject: [PATCH] Fix plugin whitespace in file name --- .../commands/arguments/JarFilesArgument.java | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/Common/src/main/java/net/frankheijden/serverutils/common/commands/arguments/JarFilesArgument.java b/Common/src/main/java/net/frankheijden/serverutils/common/commands/arguments/JarFilesArgument.java index 27da3c3..3cb0f15 100644 --- a/Common/src/main/java/net/frankheijden/serverutils/common/commands/arguments/JarFilesArgument.java +++ b/Common/src/main/java/net/frankheijden/serverutils/common/commands/arguments/JarFilesArgument.java @@ -7,6 +7,7 @@ import cloud.commandframework.context.CommandContext; import cloud.commandframework.exceptions.parsing.NoInputProvidedException; import io.leangen.geantyref.TypeToken; import java.io.File; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Queue; @@ -45,18 +46,45 @@ public class JarFilesArgument> extends CommandA } Set pluginFiles = new HashSet<>(plugin.getPluginManager().getPluginFileNames()); - File[] files = new File[inputQueue.size()]; - for (int i = 0; i < files.length; i++) { - if (!pluginFiles.contains(inputQueue.peek())) { + List files = new ArrayList<>(inputQueue.size()); + while (!inputQueue.isEmpty()) { + StringBuilder builder = new StringBuilder(inputQueue.peek()); + if (builder.length() == 0) { return ArgumentParseResult.failure(new IllegalArgumentException( - "Plugin '" + inputQueue.peek() + "' does not exist!" + "Specified argument is empty" + )); + } + inputQueue.remove(); + + final String pluginFileName; + if (builder.charAt(0) == '"') { + while (!inputQueue.isEmpty()) { + if (builder.length() > 1 && builder.charAt(builder.length() - 1) == '"') { + break; + } + builder.append(" ").append(inputQueue.remove()); + } + + if (builder.charAt(builder.length() - 1) != '"') { + return ArgumentParseResult.failure(new IllegalArgumentException( + "Could not find closing '\"' character" + )); + } + pluginFileName = builder.substring(1, builder.length() - 1); + } else { + pluginFileName = builder.toString(); + } + + if (!pluginFiles.contains(pluginFileName)) { + return ArgumentParseResult.failure(new IllegalArgumentException( + "Plugin '" + pluginFileName + "' does not exist!" )); } - files[i] = new File(plugin.getPluginManager().getPluginsFolder(), inputQueue.remove()); + files.add(new File(plugin.getPluginManager().getPluginsFolder(), pluginFileName)); } - return ArgumentParseResult.success(files); + return ArgumentParseResult.success(files.toArray(new File[0])); } @Override