1 | use regex::Regex; |
2 | |
3 | macro_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] |
11 | fn 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] |
20 | fn 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] |
30 | fn 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] |
36 | fn 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] |
42 | fn 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] |
51 | fn 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] |
59 | fn 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] |
70 | fn 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] |
77 | fn 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] |
84 | fn 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 | |