[
https://issues.apache.org/jira/browse/EXEC-54?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13583499#comment-13583499
]
DHadka edited comment on EXEC-54 at 2/21/13 8:08 PM:
-----------------------------------------------------
I'm running into a similar issue as above. In my case, I want to pass a folder
on the command line, such as {{C:\Documents and Settings\user\folder\}}. So I
call
{noformat}command.addArgument("C:\\Documents and
Settings\\user\\folder\\"){noformat}
Commons Exec then adds the quotes around the argument. But on Windows, the
trailing \ in the path escapes the quote, which then is passed as part of the
argument. In this case, the program receives the argument as: {{C:\Documents
and Settings\users\folder"}}, with the quote as part of the argument. This
creates a subtle and hard to track error condition.
Consider these cases:
C:\NoSpace\in\path - Works correctly
C:\NoSpace\in\path\ - Works correctly (no quotes are added since no spaces in
path)
C:/NoSpace/in/path - Works correctly
C:/NoSpace/in/path/ - Works correctly
C:\With Space\in\path - Works correctly
C:\With Space\in\path\ - Fails due to this bug
C:/With Space/in/path - Works correctly
C:/With Space/in/path/ - Works correctly
was (Author: dhadka):
I'm running into a similar issue as above. In my case, I want to pass a
folder on the command line, such as {{C:\Documents and Settings\user\folder\}}.
So I call {{command.addArgument("C:\\Documents and
Settings\\user\\folder\\")}}. Commons Exec then adds the quotes around the
argument. But on Windows, the trailing \ in the path escapes the quote, which
then is passed as part of the argument. In this case, the program receives the
argument as: {{C:\Documents and Settings\users\folder"}}, with the quote as
part of the argument. This creates a subtle and hard to track error condition.
Consider these cases:
C:\NoSpace\in\path - Works correctly
C:\NoSpace\in\path\ - Works correctly (no quotes are added since no spaces in
path)
C:/NoSpace/in/path - Works correctly
C:/NoSpace/in/path/ - Works correctly
C:\With Space\in\path - Works correctly
C:\With Space\in\path\ - Fails due to this bug
C:/With Space/in/path - Works correctly
C:/With Space/in/path/ - Works correctly
> Problem with argument containing spaces
> ---------------------------------------
>
> Key: EXEC-54
> URL: https://issues.apache.org/jira/browse/EXEC-54
> Project: Commons Exec
> Issue Type: Bug
> Affects Versions: 1.1
> Environment: Mac OsX 10.6.6, JVM 1.6.0
> Reporter: Jeremias Rößler
> Assignee: Siegfried Goeschl
> Labels: arguments, quotes, spaces
>
> I am new to Commons Exec, so this could also be an error in usage, but...
> When I use the {{CommandLine}} class to add a argument that contains spaces,
> some quotes are added and are then part of the argument that is given.
> For example: When I call {{java "what version"}} I get
> {{java.lang.NoClassDefFoundError: what version}}, and when I call {{java
> "\"what version\""}} (which contains escaped quotes, that are part of the
> command line argument itself), I get {{java.lang.NoClassDefFoundError: "what
> version"}}.
> So the following test fails, because as you can see in the last line, Apache
> Exec is producing the latter version where it should have produced the first
> version:
> {code:java}
> @Test
> public void testArgumentQuoting() throws Exception {
> String argument = "what version";
> DefaultExecutor executor = new DefaultExecutor();
> DefaultExecuteResultHandler resultHandler = new
> DefaultExecuteResultHandler();
> ByteArrayOutputStream out = new ByteArrayOutputStream();
> PumpStreamHandler streamHandler = new PumpStreamHandler(out,
> out);
> executor.setStreamHandler(streamHandler);
> CommandLine cmdLine = new CommandLine("java");
> cmdLine.addArgument(argument);
> executor.execute(cmdLine, resultHandler);
> resultHandler.waitFor();
> String resultPattern = "Exception in thread \"main\"
> java\\.lang\\.NoClassDefFoundError: ([\\w \"]+)";
> Pattern pattern = Pattern.compile(resultPattern);
> Matcher matcher = pattern.matcher(out.toString());
> Assert.assertTrue(matcher.find());
> // Note: Result should be <what version> and NOT <"what
> version">!
> Assert.assertEquals(argument, matcher.group(1));
> }
> {code}
> Note that the same test passes if the space is removed from the argument.
> Please also note, that I am not trying to start an external Java process, but
> this is merely an example that I assume will work on every developers machine.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira