diff options
| author | Piotr Czarnecki <pioczarn@gmail.com> | 2014-10-24 16:38:23 +0100 |
|---|---|---|
| committer | Piotr Czarnecki <pioczarn@gmail.com> | 2014-10-24 18:07:52 +0100 |
| commit | f21977318112a1b7491bbf462dfefbd8ec14743e (patch) | |
| tree | 45d69384119d63e2f17a0ff57bee1f2eb7602f38 | |
| parent | 48daba088b0f353cc4fdaba144da7a2c1b1de87f (diff) | |
| download | rust-f21977318112a1b7491bbf462dfefbd8ec14743e.tar.gz rust-f21977318112a1b7491bbf462dfefbd8ec14743e.zip | |
regex: The first range in a character class can start with a left bracket
| -rw-r--r-- | src/libregex/parse.rs | 6 | ||||
| -rw-r--r-- | src/libregex/test/tests.rs | 7 |
2 files changed, 8 insertions, 5 deletions
diff --git a/src/libregex/parse.rs b/src/libregex/parse.rs index b7313ff6c1a..35583be372c 100644 --- a/src/libregex/parse.rs +++ b/src/libregex/parse.rs @@ -374,10 +374,6 @@ impl<'a> Parser<'a> { let mut ranges: Vec<(char, char)> = vec!(); let mut alts: Vec<Ast> = vec!(); - if self.peek_is(1, ']') { - try!(self.expect(']')); - ranges.push((']', ']')) - } while self.peek_is(1, '-') { try!(self.expect('-')); ranges.push(('-', '-')) @@ -411,7 +407,7 @@ impl<'a> Parser<'a> { ast => fail!("Unexpected AST item '{}'", ast), } } - ']' => { + ']' if ranges.len() > 0 || alts.len() > 0 => { if ranges.len() > 0 { let flags = negated | (self.flags & FLAG_NOCASE); let mut ast = AstClass(combine_ranges(ranges), flags); diff --git a/src/libregex/test/tests.rs b/src/libregex/test/tests.rs index 4f4137265c0..06f7db27418 100644 --- a/src/libregex/test/tests.rs +++ b/src/libregex/test/tests.rs @@ -54,6 +54,13 @@ fn quoted_bracket_set() { } #[test] +fn first_range_starts_with_left_bracket() { + let re = regex!(r"([[-z])"); + let ms = re.find_iter("[]").collect::<Vec<(uint, uint)>>(); + assert_eq!(ms, vec![(0, 1), (1, 2)]); +} + +#[test] fn range_ends_with_escape() { let re = regex!(r"([\[-\x{5d}])"); let ms = re.find_iter("[]").collect::<Vec<(uint, uint)>>(); |
