diff --git a/src/uu/expr/src/syntax_tree.rs b/src/uu/expr/src/syntax_tree.rs index 9f817d395..9a8fb05f2 100644 --- a/src/uu/expr/src/syntax_tree.rs +++ b/src/uu/expr/src/syntax_tree.rs @@ -307,24 +307,15 @@ where let matched = captures.at(0).unwrap_or_default(); match matched.split_once(',') { Some(("", "")) => Ok(()), - Some((x, "")) | Some(("", x)) => match x.parse::() { - Ok(x) if x <= i16::MAX.into() => Ok(()), - Ok(_) => Err(ExprError::TooBigRangeQuantifierIndex), - Err(_) => Err(ExprError::InvalidBracketContent), - }, - Some((f, l)) => match (f.parse::(), l.parse::()) { + Some((x, "") | ("", x)) if x.parse::().is_ok() => Ok(()), + Some((_, "") | ("", _)) => Err(ExprError::TooBigRangeQuantifierIndex), + Some((f, l)) => match (f.parse::(), l.parse::()) { (Ok(f), Ok(l)) if f > l => Err(ExprError::InvalidBracketContent), - (Ok(f), Ok(l)) if f > i16::MAX.into() || l > i16::MAX.into() => { - Err(ExprError::TooBigRangeQuantifierIndex) - } (Ok(_), Ok(_)) => Ok(()), - _ => Err(ExprError::InvalidBracketContent), - }, - None => match matched.parse::() { - Ok(x) if x <= i16::MAX.into() => Ok(()), - Ok(_) => Err(ExprError::TooBigRangeQuantifierIndex), - Err(_) => Err(ExprError::InvalidBracketContent), + _ => Err(ExprError::TooBigRangeQuantifierIndex), }, + None if matched.parse::().is_ok() => Ok(()), + None => Err(ExprError::TooBigRangeQuantifierIndex), } } else { Err(ExprError::InvalidBracketContent) diff --git a/tests/by-util/test_expr.rs b/tests/by-util/test_expr.rs index b8952bdb8..0a16d4ea9 100644 --- a/tests/by-util/test_expr.rs +++ b/tests/by-util/test_expr.rs @@ -472,6 +472,26 @@ fn test_regex_range_quantifier() { .args(&["ab", ":", "ab\\{\\}"]) .fails() .stderr_only("expr: Invalid content of \\{\\}\n"); + new_ucmd!() + .args(&["_", ":", "a\\{12345678901234567890\\}"]) + .fails() + .stderr_only("expr: Regular expression too big\n"); + new_ucmd!() + .args(&["_", ":", "a\\{12345678901234567890,\\}"]) + .fails() + .stderr_only("expr: Regular expression too big\n"); + new_ucmd!() + .args(&["_", ":", "a\\{,12345678901234567890\\}"]) + .fails() + .stderr_only("expr: Regular expression too big\n"); + new_ucmd!() + .args(&["_", ":", "a\\{1,12345678901234567890\\}"]) + .fails() + .stderr_only("expr: Regular expression too big\n"); + new_ucmd!() + .args(&["_", ":", "a\\{1,1234567890abcdef\\}"]) + .fails() + .stderr_only("expr: Invalid content of \\{\\}\n"); } #[test]