diff options
author | Andrew Stubbs <ams@codesourcery.com> | 2016-09-19 10:02:56 +0000 |
---|---|---|
committer | Andrew Stubbs <ams@gcc.gnu.org> | 2016-09-19 10:02:56 +0000 |
commit | 471a0d47ae10724631be478381821544932db99f (patch) | |
tree | 25eb5fbad302b98d985cc4c7ec67c84c7fbe74b5 /libiberty | |
parent | 321e76fbf83720a7d88948d3e157ea9097e099ad (diff) | |
download | gcc-471a0d47ae10724631be478381821544932db99f.zip gcc-471a0d47ae10724631be478381821544932db99f.tar.gz gcc-471a0d47ae10724631be478381821544932db99f.tar.bz2 |
Fix zero-length parameter bug in pex_run.
2016-09-19 Andrew Stubbs <ams@codesourcery.com>
libiberty/
* pex-win32.c (argv_to_cmdline): Quote zero-length parameters.
libiberty/testsuite/
* test-pexecute.c (main): Insert check for zero-length parameters.
From-SVN: r240229
Diffstat (limited to 'libiberty')
-rw-r--r-- | libiberty/ChangeLog | 5 | ||||
-rw-r--r-- | libiberty/pex-win32.c | 4 | ||||
-rw-r--r-- | libiberty/testsuite/test-pexecute.c | 14 |
3 files changed, 23 insertions, 0 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 6860959..5934bc1 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,8 @@ +2016-09-19 Andrew Stubbs <ams@codesourcery.com> + + * pex-win32.c (argv_to_cmdline): Quote zero-length parameters. + * testsuite/test-pexecute.c (main): Insert check for zero-length parameters. + 2016-09-10 Mark Wielaard <mjw@redhat.com> * cp-demangle.c (d_substitution): Change struct demangle_component diff --git a/libiberty/pex-win32.c b/libiberty/pex-win32.c index 66d2f11..4c15b0d 100644 --- a/libiberty/pex-win32.c +++ b/libiberty/pex-win32.c @@ -370,6 +370,8 @@ argv_to_cmdline (char *const *argv) cmdline_len++; } } + if (j == 0) + needs_quotes = 1; /* Trailing backslashes also need to be escaped because they will be followed by the terminating quote. */ if (needs_quotes) @@ -394,6 +396,8 @@ argv_to_cmdline (char *const *argv) break; } } + if (j == 0) + needs_quotes = 1; if (needs_quotes) { diff --git a/libiberty/testsuite/test-pexecute.c b/libiberty/testsuite/test-pexecute.c index 8e01fda..f62239d 100644 --- a/libiberty/testsuite/test-pexecute.c +++ b/libiberty/testsuite/test-pexecute.c @@ -285,6 +285,20 @@ main (int argc, char **argv) ERROR ("echo exit status failed"); pex_free (pex1); + /* Check empty parameters don't get lost. */ + pex1 = TEST_PEX_INIT (PEX_USE_PIPES, "temp"); + subargv[1] = "echo"; + subargv[2] = "foo"; + subargv[3] = ""; + subargv[4] = "bar"; + subargv[5] = NULL; + TEST_PEX_RUN (pex1, 0, "./test-pexecute", subargv, NULL, NULL); + e = TEST_PEX_READ_OUTPUT (pex1); + CHECK_LINE (e, "foo bar"); /* Two spaces! */ + if (TEST_PEX_GET_STATUS_1 (pex1) != 0) + ERROR ("echo exit status failed"); + pex_free (pex1); + pex1 = TEST_PEX_INIT (PEX_USE_PIPES, "temp"); subargv[1] = "echo"; subargv[2] = "bar"; |