The idea is that you can pass an option like --aot=foo=bar,baz="abc\"def\",xyz=012 and the AOT compiler will see options foo=bar, baz=abc"def and zyx=012.
But this line that is supposed to handle the character following a \ is wrong
it never resets the state back to MONO_AOT_OPTION_STATE_STRING, so everything after the \ until the end of the options is treated as a single long option: foo=bar, baz=abc\"def",xyz=012
Also the \ is itself never removed from the option - instead of bar=abc"def we get bar=abc\"def. (And this is a hard problem because we woudl need to copy or modify the string, which we don't otherwise do)
The idea is that you can pass an option like
--aot=foo=bar,baz="abc\"def\",xyz=012
and the AOT compiler will see optionsfoo=bar
,baz=abc"def
andzyx=012
.But this line that is supposed to handle the character following a
\
is wronghttps://github.com/dotnet/runtime/blob/68b90acee9d8fbc18d47dd9409a89e3ea083d1fa/src/mono/mono/mini/aot-compiler.c#L8749-L8750
it never resets the state back to
MONO_AOT_OPTION_STATE_STRING
, so everything after the\
until the end of the options is treated as a single long option:foo=bar
,baz=abc\"def",xyz=012
Also the
\
is itself never removed from the option - instead ofbar=abc"def
we getbar=abc\"def
. (And this is a hard problem because we woudl need to copy or modify the string, which we don't otherwise do)