From 7439050d85f674a1886c4dc497fade20a9d794a7 Mon Sep 17 00:00:00 2001 From: Daniel Hofstetter Date: Wed, 28 May 2025 15:53:54 +0200 Subject: [PATCH] csplit: only allow ASCII digits for repeat pattern --- src/uu/csplit/src/patterns.rs | 2 +- tests/by-util/test_csplit.rs | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/uu/csplit/src/patterns.rs b/src/uu/csplit/src/patterns.rs index bdf15b511..b49d1c606 100644 --- a/src/uu/csplit/src/patterns.rs +++ b/src/uu/csplit/src/patterns.rs @@ -107,7 +107,7 @@ fn extract_patterns(args: &[String]) -> Result, CsplitError> { let mut patterns = Vec::with_capacity(args.len()); let to_match_reg = Regex::new(r"^(/(?P.+)/|%(?P.+)%)(?P[\+-]?\d+)?$").unwrap(); - let execute_ntimes_reg = Regex::new(r"^\{(?P\d+)|\*\}$").unwrap(); + let execute_ntimes_reg = Regex::new(r"^\{(?P[0-9]+)|\*\}$").unwrap(); let mut iter = args.iter().peekable(); while let Some(arg) = iter.next() { diff --git a/tests/by-util/test_csplit.rs b/tests/by-util/test_csplit.rs index a7a802b92..2a94c10bf 100644 --- a/tests/by-util/test_csplit.rs +++ b/tests/by-util/test_csplit.rs @@ -83,6 +83,15 @@ fn test_up_to_line_sequence() { assert_eq!(at.read("xx02"), generate(25, 51)); } +#[test] +fn test_up_to_line_with_non_ascii_repeat() { + // we use a different error message than GNU + new_ucmd!() + .args(&["numbers50.txt", "10", "{𝟚}"]) + .fails() + .stderr_contains("invalid pattern"); +} + #[test] fn test_up_to_match() { let (at, mut ucmd) = at_and_ucmd!();