aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/rtinit.c
diff options
context:
space:
mode:
authorNicolas Roche <roche@adacore.com>2021-05-11 07:58:42 +0200
committerPierre-Marie de Rodat <derodat@adacore.com>2021-07-06 14:46:58 +0000
commitd8870b1f64ae927e9469082490760b760ef5616f (patch)
treea090b07e5441ddac628aa161091a03bad766cea1 /gcc/ada/rtinit.c
parent435e79cbe51e8f7e587b9dc7da794e82fba55932 (diff)
downloadgcc-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.c18
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++)