1use regex::Regex;
2
3macro_rules! regex {
4 ($pattern:expr) => {
5 regex::Regex::new($pattern).unwrap()
6 };
7}
8
9// See: https://github.com/rust-lang/regex/issues/48
10#[test]
11fn invalid_regexes_no_crash() {
12 assert!(Regex::new("(*)").is_err());
13 assert!(Regex::new("(?:?)").is_err());
14 assert!(Regex::new("(?)").is_err());
15 assert!(Regex::new("*").is_err());
16}
17
18// See: https://github.com/rust-lang/regex/issues/98
19#[test]
20fn regression_many_repeat_stack_overflow() {
21 let re = regex!("^.{1,2500}");
22 assert_eq!(
23 vec![0..1],
24 re.find_iter("a").map(|m| m.range()).collect::<Vec<_>>()
25 );
26}
27
28// See: https://github.com/rust-lang/regex/issues/555
29#[test]
30fn regression_invalid_repetition_expr() {
31 assert!(Regex::new("(?m){1,1}").is_err());
32}
33
34// See: https://github.com/rust-lang/regex/issues/527
35#[test]
36fn regression_invalid_flags_expression() {
37 assert!(Regex::new("(((?x)))").is_ok());
38}
39
40// See: https://github.com/rust-lang/regex/issues/129
41#[test]
42fn regression_captures_rep() {
43 let re = regex!(r"([a-f]){2}(?P<foo>[x-z])");
44 let caps = re.captures("abx").unwrap();
45 assert_eq!(&caps["foo"], "x");
46}
47
48// See: https://github.com/BurntSushi/ripgrep/issues/1247
49#[cfg(feature = "unicode-perl")]
50#[test]
51fn regression_nfa_stops1() {
52 let re = regex::bytes::Regex::new(r"\bs(?:[ab])").unwrap();
53 assert_eq!(0, re.find_iter(b"s\xE4").count());
54}
55
56// See: https://github.com/rust-lang/regex/issues/981
57#[cfg(feature = "unicode")]
58#[test]
59fn regression_bad_word_boundary() {
60 let re = regex!(r#"(?i:(?:\b|_)win(?:32|64|dows)?(?:\b|_))"#);
61 let hay = "ubi-Darwin-x86_64.tar.gz";
62 assert!(!re.is_match(hay));
63 let hay = "ubi-Windows-x86_64.zip";
64 assert!(re.is_match(hay));
65}
66
67// See: https://github.com/rust-lang/regex/issues/982
68#[cfg(feature = "unicode-perl")]
69#[test]
70fn regression_unicode_perl_not_enabled() {
71 let pat = r"(\d+\s?(years|year|y))?\s?(\d+\s?(months|month|m))?\s?(\d+\s?(weeks|week|w))?\s?(\d+\s?(days|day|d))?\s?(\d+\s?(hours|hour|h))?";
72 assert!(Regex::new(pat).is_ok());
73}
74
75// See: https://github.com/rust-lang/regex/issues/995
76#[test]
77fn regression_big_regex_overflow() {
78 let pat = r" {2147483516}{2147483416}{5}";
79 assert!(Regex::new(pat).is_err());
80}
81
82// See: https://github.com/rust-lang/regex/issues/999
83#[test]
84fn regression_complete_literals_suffix_incorrect() {
85 let needles = vec![
86 "aA", "bA", "cA", "dA", "eA", "fA", "gA", "hA", "iA", "jA", "kA",
87 "lA", "mA", "nA", "oA", "pA", "qA", "rA", "sA", "tA", "uA", "vA",
88 "wA", "xA", "yA", "zA",
89 ];
90 let pattern = needles.join("|");
91 let re = regex!(&pattern);
92 let hay = "FUBAR";
93 assert_eq!(0, re.find_iter(hay).count());
94}
95