Skip to content

Commit e2e47d6

Browse files
committed
regex: Fix control flow in the parser
1 parent 00cc6d2 commit e2e47d6

File tree

2 files changed

+24
-18
lines changed

2 files changed

+24
-18
lines changed

src/libregex/parse.rs

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -411,9 +411,6 @@ impl<'a> Parser<'a> {
411411
ast => fail!("Unexpected AST item '{}'", ast),
412412
}
413413
}
414-
_ => {},
415-
}
416-
match c {
417414
']' => {
418415
if ranges.len() > 0 {
419416
let flags = negated | (self.flags & FLAG_NOCASE);
@@ -431,22 +428,21 @@ impl<'a> Parser<'a> {
431428
}
432429
return Ok(())
433430
}
434-
c => {
435-
if self.peek_is(1, '-') && !self.peek_is(2, ']') {
436-
try!(self.expect('-'))
437-
try!(self.noteof("not a ']'"))
438-
let c2 = self.cur();
439-
if c2 < c {
440-
return self.err(format!("Invalid character class \
441-
range '{}-{}'",
442-
c,
443-
c2).as_slice())
444-
}
445-
ranges.push((c, self.cur()))
446-
} else {
447-
ranges.push((c, c))
448-
}
431+
}
432+
433+
if self.peek_is(1, '-') && !self.peek_is(2, ']') {
434+
try!(self.expect('-'))
435+
try!(self.noteof("not a ']'"))
436+
let c2 = self.cur();
437+
if c2 < c {
438+
return self.err(format!("Invalid character class \
439+
range '{}-{}'",
440+
c,
441+
c2).as_slice())
449442
}
443+
ranges.push((c, self.cur()))
444+
} else {
445+
ranges.push((c, c))
450446
}
451447
}
452448
}

src/libregex/test/tests.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,16 @@ fn empty_regex_nonempty_match() {
4343
assert_eq!(ms, vec![(0, 0), (1, 1), (2, 2), (3, 3)]);
4444
}
4545

46+
#[test]
47+
fn quoted_bracket_set() {
48+
let re = regex!(r"([\x{5b}\x{5d}])");
49+
let ms = re.find_iter("[]").collect::<Vec<(uint, uint)>>();
50+
assert_eq!(ms, vec![(0, 1), (1, 2)]);
51+
let re = regex!(r"([\[\]])");
52+
let ms = re.find_iter("[]").collect::<Vec<(uint, uint)>>();
53+
assert_eq!(ms, vec![(0, 1), (1, 2)]);
54+
}
55+
4656
macro_rules! replace(
4757
($name:ident, $which:ident, $re:expr,
4858
$search:expr, $replace:expr, $result:expr) => (

0 commit comments

Comments
 (0)