Summary
GNU date treats composite strftime specifiers (%D, %F, %T, %r, %R, %c, %x, %X) as atomic: flags like - apply to the whole expansion, not to inner sub-fields. uutils lets the - flag propagate into the inner %m, producing 6/15/24 instead of 06/15/24.
Found by a fuzz_date run.
Reproduction
$ LC_ALL=C TZ=UTC /usr/bin/date -d '2024-06-15' '+%-D'
06/15/24
$ LC_ALL=C TZ=UTC target/debug/coreutils date -d '2024-06-15' '+%-D'
6/15/24
Test
#[test]
fn test_date_strftime_flag_on_composite() {
new_ucmd!()
.env("LC_ALL", "C")
.env("TZ", "UTC")
.arg("-d")
.arg("2024-06-15")
.arg("+%-D")
.succeeds()
.stdout_is("06/15/24\n");
}
Summary
GNU
datetreats composite strftime specifiers (%D,%F,%T,%r,%R,%c,%x,%X) as atomic: flags like-apply to the whole expansion, not to inner sub-fields.uutilslets the-flag propagate into the inner%m, producing6/15/24instead of06/15/24.Found by a
fuzz_daterun.Reproduction
Test