Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #23618
| From | Steven Simpson <ss@domain.invalid> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: exec problem is JDK 1.7.0_21 |
| Date | 2013-04-24 10:26 +0100 |
| Organization | A noiseless patient Spider |
| Message-ID | <c2lk4a-od3.ln1@s.simpson148.btinternet.com> (permalink) |
| References | (7 earlier) <e02i4a-8m3.ln1@s.simpson148.btinternet.com> <k32j4a-gk4.ln1@s.simpson148.btinternet.com> <ato9c2FmrfdU2@mid.dfncis.de> <r5fj4a-jd7.ln1@s.simpson148.btinternet.com> <atpce0FtpndU1@mid.dfncis.de> |
On 24/04/13 07:29, Sven Köhler wrote:
> Am 24.04.2013 01:39, schrieb Steven Simpson:
>>> Also, you have to add another backslash if the quote does not terminate
>>> the argument.
>> Again, I took it to mean that the first two rules produce the same
>> result, so \\\" and \\" both produce \".
> The documentation of CommandLineToArgv is incomplete.
Agreed.
>> Where are you getting the notion that the first two rules imply
>> different quotes? I interpret both as being literal (inner, right?).
> Well, by testing. As you can test yourself on the command line, \\" will
> result in a closing quote and \" and \\\" will result in non-closing quotes.
That's not what I'm seeing. In fact, backslashes appear to have no effect!
Cross-compiled with mingw32:
#include <windows.h>
#include <shellapi.h>
#include <stdio.h>
#include <wchar.h>
static void test(const wchar_t *s)
{
printf("\nInput line: %ls\n", s);
int argc;
LPWSTR *argv = CommandLineToArgvW(s, &argc);
if (!argv) {
printf(" unable to parse\n");
} else {
printf(" arg count: %d\n", argc);
for (int i = 0; i < argc; i++)
printf(" [%d]=[%ls]\n", i, argv[i]);
LocalFree(argv);
}
}
int main(void)
{
test(L"foo");
test(L"foo\"");
test(L"foo\\\"");
test(L"foo\\\\\"");
test(L"foo\\\\\\\"");
test(L"\"foo");
test(L"\"foo\"");
test(L"\"foo\\\"");
test(L"\"foo\\\\\"");
test(L"\"foo\\\\\\\"");
test(L"foo bar");
test(L"foo\"bar");
test(L"foo\\\"bar");
test(L"foo\\\\\"bar");
test(L"foo\\\\\\\"bar");
test(L"foo\\ bar");
test(L"foo\\\\ bar");
test(L"foo\\\\\\ bar");
test(L"\"foo bar\"");
test(L"\"foo \\\"bar\"");
test(L"\"foo \\\\\"bar\"");
test(L"\"foo \\\\\\\"bar\"");
return 0;
}
Output:
Input line: foo
arg count: 1
[0]=[foo]
Input line: foo"
arg count: 1
[0]=[foo"]
Okay, so if the quote doesn't start the argument, it's literal.
Input line: foo\"
arg count: 1
[0]=[foo\"]
Input line: foo\\"
arg count: 1
[0]=[foo\\"]
Input line: foo\\\"
arg count: 1
[0]=[foo\\\"]
These backslashes aren't folded in any way.
Input line: "foo
arg count: 1
[0]=[foo]
Input line: "foo"
arg count: 1
[0]=[foo]
So the leading quote is stripped, and the closing quote is optional - no
error.
Input line: "foo\"
arg count: 1
[0]=[foo\]
Input line: "foo\\"
arg count: 1
[0]=[foo\\]
Input line: "foo\\\"
arg count: 1
[0]=[foo\\\]
Inside the quoted argument, backslashes still have no special meaning.
And I can't get a literal quote character.
Input line: foo bar
arg count: 2
[0]=[foo]
[1]=[bar]
So a space splits arguments.
Input line: foo"bar
arg count: 1
[0]=[foo"bar]
The quote inside an unquoted argument is taken as literal.
Input line: foo\"bar
arg count: 1
[0]=[foo\"bar]
Input line: foo\\"bar
arg count: 1
[0]=[foo\\"bar]
Input line: foo\\\"bar
arg count: 1
[0]=[foo\\\"bar]
The backslashes are literal in the middle of the unquoted argument.
Input line: foo\ bar
arg count: 2
[0]=[foo\]
[1]=[bar]
Input line: foo\\ bar
arg count: 2
[0]=[foo\\]
[1]=[bar]
Input line: foo\\\ bar
arg count: 2
[0]=[foo\\\]
[1]=[bar]
Just checking that there's no unspecified way to escape a space.
Input line: "foo bar"
arg count: 1
[0]=[foo bar]
The quotes cause the space to be taken literally.
Input line: "foo \"bar"
arg count: 2
[0]=[foo \]
[1]=[bar]
Input line: "foo \\"bar"
arg count: 2
[0]=[foo \\]
[1]=[bar]
Input line: "foo \\\"bar"
arg count: 2
[0]=[foo \\\]
[1]=[bar]
Backslashes are still literal, and the next quote closes the argument
regardless. Plus, the extra quote after [bar] is not literal.
There seems to be no way to escape a space other than enclosing the
entire argument in quotes. Once inside the quotes, there's no way to
escape anything else (like a literal quote), so there's no way to escape
an argument containing a space and a quote. Backslashes behave
literally everywhere.
Is the program using CommandLineToArgvW incorrectly? Are there any
other input strings to try?
> Also, there HAS to be a way to distinguish a closing vs. a non-closing
> quote. Otherwise you wouldn't know whether the quotes in \" \\" and \\\"
> were closing or not. That's it is not documented is just a real shame!
What I'm seeing now is that general escaping is impossible, not merely
documented badly. :-(
--
ss at comp dot lancs dot ac dot uk
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
exec problem is JDK 1.7.0_21 Roedy Green <see_website@mindprod.com.invalid> - 2013-04-16 15:48 -0700
Re: exec problem is JDK 1.7.0_21 Lew <lewbloch@gmail.com> - 2013-04-16 16:48 -0700
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-20 13:00 +0300
Re: exec problem is JDK 1.7.0_21 Joerg Meier <joergmmeier@arcor.de> - 2013-04-20 15:13 +0200
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-20 19:07 +0300
Re: exec problem is JDK 1.7.0_21 markspace <markspace@nospam.nospam> - 2013-04-20 09:24 -0700
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-20 19:34 +0300
Re: exec problem is JDK 1.7.0_21 markspace <markspace@nospam.nospam> - 2013-04-20 11:01 -0700
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-21 00:25 +0300
Re: exec problem is JDK 1.7.0_21 Joerg Meier <joergmmeier@arcor.de> - 2013-04-20 22:03 +0200
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-21 00:29 +0300
Re: exec problem is JDK 1.7.0_21 Martin Gregorie <martin@address-in-sig.invalid> - 2013-04-20 21:56 +0000
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-21 08:31 +0300
Re: exec problem is JDK 1.7.0_21 Martin Gregorie <martin@address-in-sig.invalid> - 2013-04-21 11:08 +0000
Re: exec problem is JDK 1.7.0_21 Arved Sandstrom <asandstrom2@eastlink.ca> - 2013-04-21 13:43 -0300
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-21 23:12 +0300
Re: exec problem is JDK 1.7.0_21 Martin Gregorie <martin@address-in-sig.invalid> - 2013-04-21 21:17 +0000
Re: exec problem is JDK 1.7.0_21 Arne Vajhøj <arne@vajhoej.dk> - 2013-04-27 22:49 -0400
Re: exec problem is JDK 1.7.0_21 Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2013-04-20 15:03 -0700
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-21 08:26 +0300
Re: exec problem is JDK 1.7.0_21 "Chris Uppal" <chris.uppal@metagnostic.REMOVE-THIS.org> - 2013-04-21 14:30 +0100
Re: exec problem is JDK 1.7.0_21 Knute Johnson <nospam@knutejohnson.com> - 2013-04-21 09:20 -0700
Re: exec problem is JDK 1.7.0_21 markspace <markspace@nospam.nospam> - 2013-04-21 11:31 -0700
Re: exec problem is JDK 1.7.0_21 Arved Sandstrom <asandstrom2@eastlink.ca> - 2013-04-21 16:06 -0300
Re: exec problem is JDK 1.7.0_21 Martin Gregorie <martin@address-in-sig.invalid> - 2013-04-21 19:47 +0000
Re: exec problem is JDK 1.7.0_21 Martin Gregorie <martin@address-in-sig.invalid> - 2013-04-21 23:01 +0000
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-21 23:29 +0300
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-21 23:45 +0300
Re: exec problem is JDK 1.7.0_21 Martin Gregorie <martin@address-in-sig.invalid> - 2013-04-21 21:38 +0000
Re: exec problem is JDK 1.7.0_21 Knute Johnson <nospam@knutejohnson.com> - 2013-04-21 18:49 -0700
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-22 09:36 +0300
Re: exec problem is JDK 1.7.0_21 Steven Simpson <ss@domain.invalid> - 2013-04-22 10:39 +0100
Re: exec problem is JDK 1.7.0_21 Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2013-04-22 07:43 -0700
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-22 19:33 +0300
Re: exec problem is JDK 1.7.0_21 Steven Simpson <ss@domain.invalid> - 2013-04-23 07:30 +0100
Re: exec problem is JDK 1.7.0_21 Martin Gregorie <martin@address-in-sig.invalid> - 2013-04-22 21:07 +0000
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-23 23:28 +0300
Re: exec problem is JDK 1.7.0_21 Martin Gregorie <martin@address-in-sig.invalid> - 2013-04-23 21:05 +0000
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-24 11:22 +0300
Re: exec problem is JDK 1.7.0_21 Martin Gregorie <martin@address-in-sig.invalid> - 2013-04-24 20:22 +0000
Re: exec problem is JDK 1.7.0_21 Nigel Wade <nmw@ion.le.ac.uk> - 2013-04-24 11:24 +0100
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-21 23:23 +0300
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-21 00:40 +0300
Re: exec problem is JDK 1.7.0_21 Steven Simpson <ss@domain.invalid> - 2013-04-23 10:48 +0100
Re: exec problem is JDK 1.7.0_21 Donkey Hottie <donkey@fredriksson.dy.fi> - 2013-04-23 13:31 +0300
<? extends String> (was: exec problem is JDK 1.7.0_21) Steven Simpson <ss@domain.invalid> - 2013-04-23 14:55 +0100
Re: <? extends String> lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-04-23 16:37 +0100
Re: <? extends String> Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2013-04-23 08:50 -0700
Re: <? extends String> lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-04-23 17:30 +0100
Re: <? extends String> Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2013-04-23 09:58 -0700
Re: <? extends String> Donkey Hottie <donkey@fredriksson.dy.fi> - 2013-04-23 21:06 +0300
Re: <? extends String> lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-04-23 19:33 +0100
Re: <? extends String> Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2013-04-23 12:26 -0700
Re: <? extends String> lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-04-24 09:08 +0100
Re: <? extends String> Arved Sandstrom <asandstrom2@eastlink.ca> - 2013-04-23 16:28 -0300
Re: <? extends String> (was: exec problem is JDK 1.7.0_21) Lew <lewbloch@gmail.com> - 2013-04-23 14:12 -0700
Re: <? extends String> Steven Simpson <ss@domain.invalid> - 2013-04-23 23:22 +0100
Re: exec problem is JDK 1.7.0_21 Steven Simpson <ss@domain.invalid> - 2013-04-23 19:56 +0100
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-23 23:31 +0300
Re: exec problem is JDK 1.7.0_21 Steven Simpson <ss@domain.invalid> - 2013-04-23 23:39 +0100
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-24 09:29 +0300
Re: exec problem is JDK 1.7.0_21 Steven Simpson <ss@domain.invalid> - 2013-04-24 10:26 +0100
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-24 13:11 +0300
Re: exec problem is JDK 1.7.0_21 Steven Simpson <ss@domain.invalid> - 2013-04-24 22:24 +0100
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-25 11:49 +0300
Re: exec problem is JDK 1.7.0_21 Steven Simpson <ss@domain.invalid> - 2013-04-25 10:19 +0100
Re: exec problem is JDK 1.7.0_21 "Chris Uppal" <chris.uppal@metagnostic.REMOVE-THIS.org> - 2013-04-25 09:02 +0100
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-25 11:47 +0300
Re: exec problem is JDK 1.7.0_21 Steven Simpson <ss@domain.invalid> - 2013-04-25 09:50 +0100
Re: exec problem is JDK 1.7.0_21 Steven Simpson <ss@domain.invalid> - 2013-04-25 10:07 +0100
Re: exec problem is JDK 1.7.0_21 "Chris Uppal" <chris.uppal@metagnostic.REMOVE-THIS.org> - 2013-04-27 08:44 +0100
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-26 20:17 +0300
Re: exec problem is JDK 1.7.0_21 Steven Simpson <ss@domain.invalid> - 2013-04-27 09:22 +0100
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-27 12:39 +0300
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-23 23:17 +0300
Re: exec problem is JDK 1.7.0_21 Arved Sandstrom <asandstrom2@eastlink.ca> - 2013-04-23 17:32 -0300
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-24 10:39 +0300
Re: exec problem is JDK 1.7.0_21 "Chris Uppal" <chris.uppal@metagnostic.REMOVE-THIS.org> - 2013-04-25 09:02 +0100
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-25 11:59 +0300
Re: exec problem is JDK 1.7.0_21 Arved Sandstrom <asandstrom2@eastlink.ca> - 2013-04-25 18:38 -0300
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-28 10:57 +0300
Re: exec problem is JDK 1.7.0_21 Arne Vajhøj <arne@vajhoej.dk> - 2013-04-27 22:35 -0400
Re: exec problem is JDK 1.7.0_21 Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-28 09:23 +0300
Re: exec problem is JDK 1.7.0_21 Arne Vajhøj <arne@vajhoej.dk> - 2013-04-28 09:52 -0400
Re: exec problem is JDK 1.7.0_21 Stanimir Stamenkov <s7an10@netscape.net> - 2013-04-20 17:52 +0300
Re: exec problem is JDK 1.7.0_21 Arne Vajhøj <arne@vajhoej.dk> - 2013-04-27 22:31 -0400
csiph-web