]> git.lizzy.rs Git - rust.git/commitdiff
regex: The first range in a character class can start with a left bracket
authorPiotr Czarnecki <pioczarn@gmail.com>
Fri, 24 Oct 2014 15:38:23 +0000 (16:38 +0100)
committerPiotr Czarnecki <pioczarn@gmail.com>
Fri, 24 Oct 2014 17:07:52 +0000 (18:07 +0100)
src/libregex/parse.rs
src/libregex/test/tests.rs

index b7313ff6c1a1f17adac333795f4a59e2e7d9a2e6..35583be372cb34f65ae86cb62b33f5a0d916114c 100644 (file)
@@ -374,10 +374,6 @@ fn parse_class(&mut self) -> Result<(), Error> {
         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 @@ fn parse_class(&mut self) -> Result<(), Error> {
                         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);
index 4f4137265c0311730e7aaf0907e445352f6f8a53..06f7db274189d74680d0e4c559ad831b78c2b56c 100644 (file)
@@ -53,6 +53,13 @@ fn quoted_bracket_set() {
     assert_eq!(ms, vec![(0, 1), (1, 2)]);
 }
 
+#[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}])");