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 {
|
||||
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();
|
||||
true
|
||||
} else {
|
||||
@@ -216,6 +217,7 @@ mod tests {
|
||||
quoted = dq ("\\" ANY / !dq ANY)* dq;
|
||||
|
||||
case_sensitivity = "Strict " ('a'..'z')+ ", loose "i ('a'..'z'i)+;
|
||||
long_icase_str = "foo bar baz"i;
|
||||
|
||||
@icase
|
||||
hex_config = "let " var_name " = 0x" ('a'..'f' / '0'..'9')+;
|
||||
@@ -322,6 +324,12 @@ mod tests {
|
||||
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]
|
||||
fn test_captures() {
|
||||
let mut p = ParseState::new("alice@example.com");
|
||||
|
||||
Reference in New Issue
Block a user