Incorrect command line handling when launching Cygwin program from Windows
Old, Oliver
Oliver.Old@loewen.de
Thu Jul 31 13:28:14 GMT 2025
Hello!
I have recently noticed that the Windows command line parsing routine of Cygwin programs does not
work correctly when an escaped quotation mark is included. This is relevant when launching a Cygwin-
based GCC through Windows CMake-generated Ninja files. We are passing preprocessor definitions
containing quotation marks to GCC and CMake wants to pass them backslash-escaped, but unquoted, on
the command line.
A test program I have written to inspect this issue:
#include <stdio.h>
int main(int argc, char** argv) {
for (int i = 0; i < argc; ++i) puts(argv[i]);
}
Running it (via cmd.exe):
>echo.exe a b\"c\" d
echo
a
b\c" d
The first escape sequence is ignored, but the quote is read and causes the parser to switch to
quoted argument mode where it recognizes the remaining escaped quotes as it already should have done
in regular parsing mode. It then proceeds to eat the remaining command line as there aren't any
unescaped quotation marks, usually leading GCC to complain about no input files being given.
Running the Windows-native version of the program:
>echo-win32.exe a b\"c\" d
echo-win32.exe
a
b"c"
d
This should be the expected output. Is the way the escaped quotation mark is treated intended
behavior? I cannot really see how it would be, given that the parser is only used for command lines
stemming from being launched by Windows-native programs.
Best regards
Oliver Old
________________________________
LÖWEN ENTERTAINMENT GmbH • Saarlandstraße 240 • 55411 Bingen am Rhein • Geschäftsführung: Christian Arras (Vorsitzender), Oliver Bagus, Dr. Daniel Henzgen • Vorsitz im Aufsichtsrat: Uwe Christiansen • Amtsgericht Mainz • HRB 23327 • USt.-IdNr. DE148266135 • WEEE-Reg.-Nr. DE 53361450 • Tel.: +49 6721 407 0 • E-Mail: info@loewen.de
More information about the Cygwin
mailing list