diff options
author | Nicolas Roche <roche@adacore.com> | 2021-05-11 07:58:42 +0200 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2021-07-06 14:46:58 +0000 |
commit | d8870b1f64ae927e9469082490760b760ef5616f (patch) | |
tree | a090b07e5441ddac628aa161091a03bad766cea1 /gcc/ada/rtinit.c | |
parent | 435e79cbe51e8f7e587b9dc7da794e82fba55932 (diff) | |
download | gcc-d8870b1f64ae927e9469082490760b760ef5616f.zip gcc-d8870b1f64ae927e9469082490760b760ef5616f.tar.gz gcc-d8870b1f64ae927e9469082490760b760ef5616f.tar.bz2 |
[Ada] Handle malformed command line on Win32
gcc/ada/
* rtinit.c (skip_quoted_string): Handle malformed command line
with no closing double quote.
(skip_argument): Handle case in which a null character is
encountered by skip_quote_string.
Diffstat (limited to 'gcc/ada/rtinit.c')
-rw-r--r-- | gcc/ada/rtinit.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ada/rtinit.c b/gcc/ada/rtinit.c index 391c7e9..83a63c8 100644 --- a/gcc/ada/rtinit.c +++ b/gcc/ada/rtinit.c @@ -147,6 +147,19 @@ static void skip_quoted_string (const WCHAR **current_in, } ci++; } + + /* Handle the case in which a nul character was found instead of a closing + double quote. In that case consider all the backslashes as literal + characters. */ + if (*ci == '\0') + { + for (int i=0; i<qbs_count; i++) + { + *co='\\'; + co++; + } + } + *current_in = ci; *current_out = co; } @@ -205,7 +218,10 @@ static void skip_argument (const WCHAR **current_in, bs_count = 0; *co = *ci; co++; } - ci++; + if (*ci != '\0') + { + ci++; + } } for (int i=0; i<bs_count; i++) |