From c5bdff1816802b3d90a6d473793d7f29c07e9522 Mon Sep 17 00:00:00 2001 From: Devel08 Date: Sat, 25 Apr 2026 19:51:57 +0300 Subject: [PATCH] numfmt: treat multibyte chars as a single character (#11992) * treat multibyte chars as a single character * add test for issue 11937 --- src/uu/numfmt/src/format.rs | 2 +- tests/by-util/test_numfmt.rs | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/uu/numfmt/src/format.rs b/src/uu/numfmt/src/format.rs index b4bf4cd23..fee0cca08 100644 --- a/src/uu/numfmt/src/format.rs +++ b/src/uu/numfmt/src/format.rs @@ -620,7 +620,7 @@ fn transform_to( /// Right-aligns when `right_align` is true, left-aligns otherwise. /// Unlike `format!("{:>width$}")`, this handles widths larger than 65535. fn pad_string(s: &str, width: usize, fill: char, right_align: bool) -> String { - let len = s.len(); + let len = s.chars().count(); if len >= width { return s.to_string(); } diff --git a/tests/by-util/test_numfmt.rs b/tests/by-util/test_numfmt.rs index b73dc1c48..b58fa79c6 100644 --- a/tests/by-util/test_numfmt.rs +++ b/tests/by-util/test_numfmt.rs @@ -1549,3 +1549,13 @@ fn test_si_format_precision_no_cap() { .succeeds() .stdout_is("1.23457M\n"); } + +// https://github.com/uutils/coreutils/issues/11937 +// numfmt: --format width accounting diverges from GNU for multi-byte --suffix +#[test] +fn test_multibyte_suffix_issue11937() { + new_ucmd!() + .args(&["--suffix=€", "--format=%10.2f", "692"]) + .succeeds() + .stdout_is(" 692.00€\n"); +}