From ee721ebf4e4288fc83a3fab3c26bd5a8d2bc6d0e Mon Sep 17 00:00:00 2001 From: snobee Date: Wed, 2 Feb 2022 21:22:28 -0800 Subject: [PATCH 1/2] head: handle multibyte numeric utf-8 chars --- src/uu/head/src/parse.rs | 2 +- tests/by-util/test_head.rs | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/uu/head/src/parse.rs b/src/uu/head/src/parse.rs index 3f1d8ef42..b44a8b69d 100644 --- a/src/uu/head/src/parse.rs +++ b/src/uu/head/src/parse.rs @@ -20,7 +20,7 @@ pub fn parse_obsolete(src: &str) -> Option let mut has_num = false; let mut last_char = 0 as char; for (n, c) in &mut chars { - if c.is_numeric() { + if c.is_digit(10) { has_num = true; num_end = n; } else { diff --git a/tests/by-util/test_head.rs b/tests/by-util/test_head.rs index 246f5b62a..25410d76f 100644 --- a/tests/by-util/test_head.rs +++ b/tests/by-util/test_head.rs @@ -306,6 +306,10 @@ fn test_head_invalid_num() { )); } } + new_ucmd!() + .args(&["-c", "-³"]) + .fails() + .stderr_is("head: invalid number of bytes: '³'"); } #[test] From 3586465917372aa3a95f677a9c387749cd5a4a85 Mon Sep 17 00:00:00 2001 From: Hanif Bin Ariffin Date: Thu, 3 Feb 2022 20:17:53 +0800 Subject: [PATCH 2/2] dont use is_numeric to check for digits Signed-off-by: Hanif Bin Ariffin --- src/uu/tail/src/parse.rs | 2 +- tests/by-util/test_stat.rs | 6 ++++++ tests/by-util/test_tail.rs | 4 ++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/uu/tail/src/parse.rs b/src/uu/tail/src/parse.rs index 1c4f36bbd..ea9df9a02 100644 --- a/src/uu/tail/src/parse.rs +++ b/src/uu/tail/src/parse.rs @@ -19,7 +19,7 @@ pub fn parse_obsolete(src: &str) -> Option let mut has_num = false; let mut last_char = 0 as char; for (n, c) in &mut chars { - if c.is_numeric() { + if c.is_digit(10) { has_num = true; num_end = n; } else { diff --git a/tests/by-util/test_stat.rs b/tests/by-util/test_stat.rs index 9bbb1c1ca..8c1255a88 100644 --- a/tests/by-util/test_stat.rs +++ b/tests/by-util/test_stat.rs @@ -36,6 +36,12 @@ fn test_group_num() { assert_eq!("", group_num("")); } +#[test] +#[should_panic] +fn test_group_num_panic_if_invalid_numeric_characters() { + group_num("³³³³³"); +} + #[cfg(test)] mod test_generate_tokens { use super::*; diff --git a/tests/by-util/test_tail.rs b/tests/by-util/test_tail.rs index dcdb2e9dc..ebcd29cf5 100644 --- a/tests/by-util/test_tail.rs +++ b/tests/by-util/test_tail.rs @@ -491,6 +491,10 @@ fn test_tail_invalid_num() { )); } } + new_ucmd!() + .args(&["-c", "-³"]) + .fails() + .stderr_is("tail: invalid number of bytes: '³'"); } #[test]