From 9d39178f2f60b6076e4bd00e263f2304084f34b4 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Tue, 3 Jun 2014 23:04:59 -0400 Subject: [PATCH] Fixes #13843. An empty regex is a valid regex that always matches. This behavior is consistent with at least Go and Python. A couple regression tests are included. --- src/libregex/parse/mod.rs | 3 +++ src/libregex/test/tests.rs | 14 ++++++++++++++ 2 files changed, 17 insertions(+) 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) => (