Skip to content

Commit 935828f

Browse files
committed
fix error in reading escape sequences
1 parent 1288a77 commit 935828f

File tree

3 files changed

+190
-81
lines changed

3 files changed

+190
-81
lines changed

src/lib.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ mod tests {
5555
assert_eq!(validator.validate_pattern("[abc]de|fg", true), Ok(()));
5656
assert_eq!(validator.validate_pattern("^.$", false), Ok(()));
5757
assert_eq!(validator.validate_pattern("^.$", true), Ok(()));
58+
assert_eq!(validator.validate_pattern("foo\\[bar", false), Ok(()));
59+
assert_eq!(validator.validate_pattern("foo\\[bar", true), Ok(()));
5860

5961
assert_ne!(validator.validate_pattern("^[z-a]$", false), Ok(()));
6062
assert_ne!(validator.validate_pattern("0{2,1}", false), Ok(()));
@@ -107,4 +109,44 @@ mod tests {
107109
assert_ne!(validator.validate_pattern("{1,", true), Ok(()));
108110
assert_ne!(validator.validate_pattern("{1,2", true), Ok(()));
109111
}
112+
113+
#[test]
114+
fn unicode_single_bracket() {
115+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
116+
assert_ne!(validator.validate_pattern("(", true), Ok(()));
117+
assert_ne!(validator.validate_pattern(")", true), Ok(()));
118+
assert_ne!(validator.validate_pattern("[", true), Ok(()));
119+
assert_ne!(validator.validate_pattern("]", true), Ok(()));
120+
assert_ne!(validator.validate_pattern("{", true), Ok(()));
121+
assert_ne!(validator.validate_pattern("}", true), Ok(()));
122+
}
123+
124+
#[test]
125+
fn unicode_escapes() {
126+
let mut validator = EcmaRegexValidator::new(EcmaVersion::ES2018);
127+
assert_eq!(validator.validate_pattern("\\u{10ffff}", true), Ok(()));
128+
assert_ne!(validator.validate_pattern("\\u{110000}", true), Ok(()));
129+
assert_eq!(validator.validate_pattern("\\u{110000}", false), Ok(()));
130+
assert_eq!(validator.validate_pattern("foo\\ud803\\ude6dbar", true), Ok(()));
131+
assert_eq!(validator.validate_pattern("(\u{12345}|\u{23456}).\\1", true), Ok(()));
132+
assert_eq!(validator.validate_pattern("\u{12345}{3}", true), Ok(()));
133+
134+
// unicode escapes in character classes
135+
assert_eq!(validator.validate_pattern("[\\u0062-\\u0066]oo", false), Ok(()));
136+
assert_eq!(validator.validate_pattern("[\\u0062-\\u0066]oo", true), Ok(()));
137+
assert_eq!(validator.validate_pattern("[\\u{0062}-\\u{0066}]oo", true), Ok(()));
138+
assert_eq!(validator.validate_pattern("[\\u{62}-\\u{00000066}]oo", true), Ok(()));
139+
140+
// invalid escapes
141+
assert_eq!(validator.validate_pattern("first\\u\\x\\z\\8\\9second", false), Ok(()));
142+
assert_eq!(validator.validate_pattern("[\\u\\x\\z\\8\\9]", false), Ok(()));
143+
assert_ne!(validator.validate_pattern("/\\u/u", true), Ok(()));
144+
assert_ne!(validator.validate_pattern("/\\u12/u", true), Ok(()));
145+
assert_ne!(validator.validate_pattern("/\\ufoo/u", true), Ok(()));
146+
assert_ne!(validator.validate_pattern("/\\x/u", true), Ok(()));
147+
assert_ne!(validator.validate_pattern("/\\xfoo/u", true), Ok(()));
148+
assert_ne!(validator.validate_pattern("/\\z/u", true), Ok(()));
149+
assert_ne!(validator.validate_pattern("/\\8/u", true), Ok(()));
150+
assert_ne!(validator.validate_pattern("/\\9/u", true), Ok(()));
151+
}
110152
}

src/reader.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ impl Reader {
109109
}
110110

111111
fn at(&self, i: usize) -> Option<char> {
112-
println!("{:x?}", self.src.as_bytes());
113112
if i >= self.end {
114113
None
115114
} else if self.unicode {

0 commit comments

Comments
 (0)