From f0c3da6562fc233652bb9cf28a01c9d34485c948 Mon Sep 17 00:00:00 2001 From: Elliotte Rusty Harold Date: Tue, 10 Feb 2026 07:52:02 -0500 Subject: [PATCH 1/5] Remove a lot of escaping logic that's never used --- .../shared/utils/cli/shell/BourneShell.java | 5 -- .../shared/utils/cli/shell/CmdShell.java | 1 - .../maven/shared/utils/cli/shell/Shell.java | 74 +------------------ 3 files changed, 4 insertions(+), 76 deletions(-) diff --git a/src/main/java/org/apache/maven/shared/utils/cli/shell/BourneShell.java b/src/main/java/org/apache/maven/shared/utils/cli/shell/BourneShell.java index 5363fc3f..e73ce68f 100644 --- a/src/main/java/org/apache/maven/shared/utils/cli/shell/BourneShell.java +++ b/src/main/java/org/apache/maven/shared/utils/cli/shell/BourneShell.java @@ -34,11 +34,6 @@ public class BourneShell extends Shell { public BourneShell() { setUnconditionalQuoting(true); setShellCommand("/bin/sh"); - setArgumentQuoteDelimiter('\''); - setExecutableQuoteDelimiter('\''); - setSingleQuotedArgumentEscaped(true); - setSingleQuotedExecutableEscaped(false); - setQuotedExecutableEnabled(true); } /** diff --git a/src/main/java/org/apache/maven/shared/utils/cli/shell/CmdShell.java b/src/main/java/org/apache/maven/shared/utils/cli/shell/CmdShell.java index b84e19d8..efd61d47 100644 --- a/src/main/java/org/apache/maven/shared/utils/cli/shell/CmdShell.java +++ b/src/main/java/org/apache/maven/shared/utils/cli/shell/CmdShell.java @@ -32,7 +32,6 @@ public class CmdShell extends Shell { */ public CmdShell() { setShellCommand("cmd.exe"); - setQuotedExecutableEnabled(true); setShellArgs(new String[] {"/X", "/C"}); } diff --git a/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java b/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java index c03d7685..d05b49d8 100644 --- a/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java +++ b/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java @@ -51,15 +51,7 @@ public class Shell { private String workingDir; - private boolean quotedExecutableEnabled = true; - - private boolean singleQuotedArgumentEscaped = false; - - private boolean singleQuotedExecutableEscaped = false; - - private char argQuoteDelimiter = '\"'; - - private char exeQuoteDelimiter = '\"'; + private final boolean singleQuotedArgumentEscaped = false; /** * Set the command to execute the shell (e.g. COMMAND.COM, /bin/bash,...). @@ -104,10 +96,10 @@ String[] getShellArgs() { } protected String quoteOneItem(String inputString, boolean isExecutable) { - char[] escapeChars = getEscapeChars(isSingleQuotedExecutableEscaped(), isDoubleQuotedExecutableEscaped()); + char[] escapeChars = {}; return StringUtils.quoteAndEscape( inputString, - isExecutable ? getExecutableQuoteDelimiter() : getArgumentQuoteDelimiter(), + isExecutable ? '\"' : '\"', escapeChars, getQuotingTriggerChars(), '\\', @@ -171,22 +163,6 @@ String getExecutionPreamble() { return null; } - char[] getEscapeChars(boolean includeSingleQuote, boolean includeDoubleQuote) { - StringBuilder buf = new StringBuilder(2); - if (includeSingleQuote) { - buf.append('\''); - } - - if (includeDoubleQuote) { - buf.append('\"'); - } - - char[] result = new char[buf.length()]; - buf.getChars(0, buf.length(), result, 0); - - return result; - } - /** * @return false in all cases */ @@ -201,36 +177,6 @@ protected boolean isSingleQuotedArgumentEscaped() { return singleQuotedArgumentEscaped; } - boolean isDoubleQuotedExecutableEscaped() { - return false; - } - - boolean isSingleQuotedExecutableEscaped() { - return singleQuotedExecutableEscaped; - } - - /** - * @param argQuoteDelimiterParameter {@link #argQuoteDelimiter} - */ - void setArgumentQuoteDelimiter(char argQuoteDelimiterParameter) { - this.argQuoteDelimiter = argQuoteDelimiterParameter; - } - - char getArgumentQuoteDelimiter() { - return argQuoteDelimiter; - } - - /** - * @param exeQuoteDelimiterParameter {@link #exeQuoteDelimiter} - */ - void setExecutableQuoteDelimiter(char exeQuoteDelimiterParameter) { - this.exeQuoteDelimiter = exeQuoteDelimiterParameter; - } - - char getExecutableQuoteDelimiter() { - return exeQuoteDelimiter; - } - /** * Get the full command line to execute, including shell command, shell arguments, * executable and executable arguments. @@ -271,12 +217,8 @@ boolean isQuotedArgumentsEnabled() { return quotedArgumentsEnabled; } - void setQuotedExecutableEnabled(boolean quotedExecutableEnabled) { - this.quotedExecutableEnabled = quotedExecutableEnabled; - } - boolean isQuotedExecutableEnabled() { - return quotedExecutableEnabled; + return true; } /** @@ -331,14 +273,6 @@ String getWorkingDirectoryAsString() { return workingDir; } - void setSingleQuotedArgumentEscaped(boolean singleQuotedArgumentEscaped) { - this.singleQuotedArgumentEscaped = singleQuotedArgumentEscaped; - } - - void setSingleQuotedExecutableEscaped(boolean singleQuotedExecutableEscaped) { - this.singleQuotedExecutableEscaped = singleQuotedExecutableEscaped; - } - public boolean isUnconditionalQuoting() { return unconditionalQuoting; } From c3deefdbfade420965b393c3e3a86da78c46845f Mon Sep 17 00:00:00 2001 From: Elliotte Rusty Harold Date: Tue, 10 Feb 2026 07:57:35 -0500 Subject: [PATCH 2/5] Remove a lot of escaping logic that's never used --- .../maven/shared/utils/cli/shell/BourneShell.java | 5 +++++ .../maven/shared/utils/cli/shell/CmdShell.java | 1 + .../apache/maven/shared/utils/cli/shell/Shell.java | 12 ++---------- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/apache/maven/shared/utils/cli/shell/BourneShell.java b/src/main/java/org/apache/maven/shared/utils/cli/shell/BourneShell.java index e73ce68f..bc3e9bb9 100644 --- a/src/main/java/org/apache/maven/shared/utils/cli/shell/BourneShell.java +++ b/src/main/java/org/apache/maven/shared/utils/cli/shell/BourneShell.java @@ -39,6 +39,7 @@ public BourneShell() { /** * {@inheritDoc} */ + @Override public String getExecutable() { if (Os.isFamily(Os.FAMILY_WINDOWS)) { return super.getExecutable(); @@ -50,6 +51,7 @@ public String getExecutable() { /** * {@inheritDoc} */ + @Override public List getShellArgsList() { List shellArgs = new ArrayList<>(); List existingShellArgs = super.getShellArgsList(); @@ -66,6 +68,7 @@ public List getShellArgsList() { /** * {@inheritDoc} */ + @Override public String[] getShellArgs() { String[] shellArgs = super.getShellArgs(); if (shellArgs == null) { @@ -87,6 +90,7 @@ public String[] getShellArgs() { /** * {@inheritDoc} */ + @Override protected String getExecutionPreamble() { if (getWorkingDirectoryAsString() == null) { return null; @@ -113,6 +117,7 @@ protected String getExecutionPreamble() { * @param path not null path * @return the path unified correctly for the Bourne shell */ + @Override protected String quoteOneItem(String path, boolean isExecutable) { if (path == null) { return null; diff --git a/src/main/java/org/apache/maven/shared/utils/cli/shell/CmdShell.java b/src/main/java/org/apache/maven/shared/utils/cli/shell/CmdShell.java index efd61d47..b63cd0d4 100644 --- a/src/main/java/org/apache/maven/shared/utils/cli/shell/CmdShell.java +++ b/src/main/java/org/apache/maven/shared/utils/cli/shell/CmdShell.java @@ -76,6 +76,7 @@ public CmdShell() { * @param arguments the arguments for the executable * @return the resulting command line */ + @Override public List getCommandLine(String executable, String... arguments) { StringBuilder sb = new StringBuilder(); sb.append('"'); diff --git a/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java b/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java index d05b49d8..537e420f 100644 --- a/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java +++ b/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java @@ -132,11 +132,7 @@ List getRawCommandLine(String executableParameter, String... argumentsPa sb.append(preamble); } - if (isQuotedExecutableEnabled()) { - sb.append(quoteOneItem(executableParameter, true)); - } else { - sb.append(executableParameter); - } + sb.append(quoteOneItem(executableParameter, true)); } for (String argument : argumentsParameter) { if (sb.length() > 0) { @@ -213,14 +209,10 @@ public void setQuotedArgumentsEnabled(boolean quotedArgumentsEnabled) { this.quotedArgumentsEnabled = quotedArgumentsEnabled; } - boolean isQuotedArgumentsEnabled() { + private boolean isQuotedArgumentsEnabled() { return quotedArgumentsEnabled; } - boolean isQuotedExecutableEnabled() { - return true; - } - /** * Sets the executable to run. * From 649444f7d4ced161dd38065b424d3c0a33237da9 Mon Sep 17 00:00:00 2001 From: Elliotte Rusty Harold Date: Tue, 10 Feb 2026 08:02:34 -0500 Subject: [PATCH 3/5] remove more logic --- .../apache/maven/shared/utils/cli/shell/Shell.java | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java b/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java index 537e420f..9ca617d9 100644 --- a/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java +++ b/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java @@ -23,8 +23,6 @@ import java.util.Arrays; import java.util.List; -import org.apache.maven.shared.utils.StringUtils; - /** * Class that abstracts the Shell functionality, * with subclasses for shells that behave particularly, like @@ -96,14 +94,7 @@ String[] getShellArgs() { } protected String quoteOneItem(String inputString, boolean isExecutable) { - char[] escapeChars = {}; - return StringUtils.quoteAndEscape( - inputString, - isExecutable ? '\"' : '\"', - escapeChars, - getQuotingTriggerChars(), - '\\', - unconditionalQuoting); + return inputString; } /** From cfa13ea9a197b508b9a81066e06dc683b53cf896 Mon Sep 17 00:00:00 2001 From: Elliotte Rusty Harold Date: Tue, 10 Feb 2026 08:20:08 -0500 Subject: [PATCH 4/5] one more --- .../org/apache/maven/shared/utils/cli/shell/BourneShell.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/apache/maven/shared/utils/cli/shell/BourneShell.java b/src/main/java/org/apache/maven/shared/utils/cli/shell/BourneShell.java index bc3e9bb9..a5be07f4 100644 --- a/src/main/java/org/apache/maven/shared/utils/cli/shell/BourneShell.java +++ b/src/main/java/org/apache/maven/shared/utils/cli/shell/BourneShell.java @@ -32,7 +32,6 @@ public class BourneShell extends Shell { * Create instance of BourneShell. */ public BourneShell() { - setUnconditionalQuoting(true); setShellCommand("/bin/sh"); } From d30f9a9fd6598a8f974cb70829698ddc7f712ffb Mon Sep 17 00:00:00 2001 From: Elliotte Rusty Harold Date: Tue, 10 Feb 2026 08:22:25 -0500 Subject: [PATCH 5/5] one more --- .../java/org/apache/maven/shared/utils/cli/shell/Shell.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java b/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java index 9ca617d9..83596553 100644 --- a/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java +++ b/src/main/java/org/apache/maven/shared/utils/cli/shell/Shell.java @@ -130,7 +130,7 @@ List getRawCommandLine(String executableParameter, String... argumentsPa sb.append(' '); } - if (isQuotedArgumentsEnabled()) { + if (quotedArgumentsEnabled) { sb.append(quoteOneItem(argument, false)); } else { sb.append(argument); @@ -200,10 +200,6 @@ public void setQuotedArgumentsEnabled(boolean quotedArgumentsEnabled) { this.quotedArgumentsEnabled = quotedArgumentsEnabled; } - private boolean isQuotedArgumentsEnabled() { - return quotedArgumentsEnabled; - } - /** * Sets the executable to run. *