Summary
date leaks the strftime O modifier as literal text (e.g. %Om → %om) while GNU strips it in C locale. The O modifier requests "alternative numeric symbols" and is a no-op under LC_ALL=C.
Found by a fuzz_date run.
Reproduction
$ LC_ALL=C TZ=UTC /usr/bin/date -d '2024-06-15' '+%Om-%Oy-%Ol'
06-24-12
$ echo $?
0
$ LC_ALL=C TZ=UTC target/debug/coreutils date -d '2024-06-15' '+%Om-%Oy-%Ol'
%Om-%Oy-%Ol
$ echo $?
0
The E modifier is similarly affected.
Test
#[test]
fn test_date_strftime_o_modifier() {
new_ucmd!()
.env("LC_ALL", "C")
.env("TZ", "UTC")
.arg("-d")
.arg("2024-06-15")
.arg("+%Om-%Oy-%Ol")
.succeeds()
.stdout_is("06-24-12\n");
}
Summary
dateleaks the strftimeOmodifier as literal text (e.g.%Om→%om) while GNU strips it in C locale. TheOmodifier requests "alternative numeric symbols" and is a no-op underLC_ALL=C.Found by a
fuzz_daterun.Reproduction
The
Emodifier is similarly affected.Test