diff --git a/src/uu/numfmt/src/format.rs b/src/uu/numfmt/src/format.rs index 77febdaaa41..e2cb093dea1 100644 --- a/src/uu/numfmt/src/format.rs +++ b/src/uu/numfmt/src/format.rs @@ -57,7 +57,7 @@ fn find_valid_number_with_suffix(s: &str, unit: Unit) -> Option<&str> { let accepts_suffix = unit != Unit::None; let accepts_i = [Unit::Auto, Unit::Iec(true)].contains(&unit); - let mut characters = s.chars().skip(numeric_part.len()); + let mut characters = s[numeric_part.len()..].chars(); let potential_suffix = characters.next(); let potential_i = characters.next(); diff --git a/tests/by-util/test_numfmt.rs b/tests/by-util/test_numfmt.rs index 33d810af269..ea731dde3e3 100644 --- a/tests/by-util/test_numfmt.rs +++ b/tests/by-util/test_numfmt.rs @@ -447,6 +447,21 @@ fn test_field_with_multibyte_whitespace_separator() { .stdout_only("1K 2000\n"); } +#[test] +fn test_from_multibyte_decimal_separator_invalid_suffix() { + new_ucmd!() + .env("LC_ALL", "fr_FR. UTF-8") + .args(&["--from=si", "1٫€K"]) + .fails_with_code(2) + .stderr_only("numfmt: invalid suffix in input '1٫€K': '€K'\n"); + + new_ucmd!() + .env("LC_ALL", "ar_SA.UTF-8") + .args(&["--from=auto", "1٫€Ki"]) + .fails_with_code(2) + .stderr_only("numfmt: invalid suffix in input '1٫€Ki': '€Ki'\n"); +} + #[test] fn test_format_selected_fields() { new_ucmd!()