diff options
Diffstat (limited to 'platform/util/src/com/intellij/execution/configurations/CommandLineTokenizer.java')
-rw-r--r-- | platform/util/src/com/intellij/execution/configurations/CommandLineTokenizer.java | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/platform/util/src/com/intellij/execution/configurations/CommandLineTokenizer.java b/platform/util/src/com/intellij/execution/configurations/CommandLineTokenizer.java index a62af9aa62dc..3f351b9a573e 100644 --- a/platform/util/src/com/intellij/execution/configurations/CommandLineTokenizer.java +++ b/platform/util/src/com/intellij/execution/configurations/CommandLineTokenizer.java @@ -20,9 +20,9 @@ import java.util.List; import java.util.StringTokenizer; /** - * Splits input String to tokens being aware of quoted tokens ("foo bar") and escaped spaces (foo\ bar), + * Splits input String to tokens being aware of quoted tokens ("foo bar") and escaped spaces & quotes (\"foo\ bar\"), * usually used for splitting command line to separate arguments that may contain space symbols. - * Escaped symbols are not handled so there's no way to get token that itself contains quotation mark. + * Space and quote are the only symbols that can be escaped */ public class CommandLineTokenizer extends StringTokenizer { @@ -103,8 +103,10 @@ public class CommandLineTokenizer extends StringTokenizer { do { while ((i = nextToken.indexOf('"')) >= 0) { - quotationMarks++; - buffer.append(nextToken.substring(0, i)); + boolean isEscapedQuote = i > 0 && nextToken.charAt(i - 1) == '\\'; + if (!isEscapedQuote) quotationMarks++; + buffer.append(nextToken.substring(0, isEscapedQuote ? i - 1 : i)); + if (isEscapedQuote) buffer.append('"'); nextToken = nextToken.substring(i + 1); } |