diff --git a/src/libregex/parse/mod.rs b/src/libregex/parse/mod.rs index bd2e454a9f8..14e34b805a3 100644 --- a/src/libregex/parse/mod.rs +++ b/src/libregex/parse/mod.rs @@ -201,6 +201,9 @@ pub fn parse(s: &str) -> Result { impl<'a> Parser<'a> { fn parse(&mut self) -> Result { + if self.chars.len() == 0 { + return Ok(Nothing); + } loop { let c = self.cur(); match c { diff --git a/src/libregex/test/tests.rs b/src/libregex/test/tests.rs index 68d43156ae6..35cb7c3c5b0 100644 --- a/src/libregex/test/tests.rs +++ b/src/libregex/test/tests.rs @@ -28,6 +28,20 @@ fn split() { assert_eq!(subs, vec!("cauchy", "plato", "tyler", "binx")); } +#[test] +fn empty_regex_empty_match() { + let re = regex!(""); + let ms = re.find_iter("").collect::>(); + assert_eq!(ms, vec![(0, 0)]); +} + +#[test] +fn empty_regex_nonempty_match() { + let re = regex!(""); + let ms = re.find_iter("abc").collect::>(); + assert_eq!(ms, vec![(0, 0), (1, 1), (2, 2), (3, 3)]); +} + macro_rules! replace( ($name:ident, $which:ident, $re:expr, $search:expr, $replace:expr, $result:expr) => (