Fix bug with literal_i() going beyond EOI
This commit is contained in:
+9
-1
@@ -108,7 +108,8 @@ pub mod backend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn literal_i(&mut self, s: &str) -> bool {
|
fn literal_i(&mut self, s: &str) -> bool {
|
||||||
if self.input[self.offset..(self.offset + s.len())].eq_ignore_ascii_case(s) {
|
let range = self.offset..(self.offset + s.len());
|
||||||
|
if range.end <= self.input.len() && self.input[range].eq_ignore_ascii_case(s) {
|
||||||
self.offset += s.len();
|
self.offset += s.len();
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
@@ -216,6 +217,7 @@ mod tests {
|
|||||||
quoted = dq ("\\" ANY / !dq ANY)* dq;
|
quoted = dq ("\\" ANY / !dq ANY)* dq;
|
||||||
|
|
||||||
case_sensitivity = "Strict " ('a'..'z')+ ", loose "i ('a'..'z'i)+;
|
case_sensitivity = "Strict " ('a'..'z')+ ", loose "i ('a'..'z'i)+;
|
||||||
|
long_icase_str = "foo bar baz"i;
|
||||||
|
|
||||||
@icase
|
@icase
|
||||||
hex_config = "let " var_name " = 0x" ('a'..'f' / '0'..'9')+;
|
hex_config = "let " var_name " = 0x" ('a'..'f' / '0'..'9')+;
|
||||||
@@ -322,6 +324,12 @@ mod tests {
|
|||||||
assert!(!parse(hex_config, "let BAR = 0xcafe"));
|
assert!(!parse(hex_config, "let BAR = 0xcafe"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_icase_eoi() {
|
||||||
|
assert!(parse(long_icase_str, "FOO BAR BAZ"));
|
||||||
|
assert!(!parse(long_icase_str, "FOO BAR BA"));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_captures() {
|
fn test_captures() {
|
||||||
let mut p = ParseState::new("alice@example.com");
|
let mut p = ParseState::new("alice@example.com");
|
||||||
|
|||||||
Reference in New Issue
Block a user