storkit: merge 391_bug_strip_prefix_ci_panics_on_multi_byte_utf_8_characters
This commit is contained in:
@@ -228,10 +228,8 @@ fn strip_bot_mention<'a>(message: &'a str, bot_name: &str, bot_user_id: &str) ->
|
|||||||
/// Case-insensitive prefix strip that also requires the match to end at a
|
/// Case-insensitive prefix strip that also requires the match to end at a
|
||||||
/// word boundary (whitespace, punctuation, or end-of-string).
|
/// word boundary (whitespace, punctuation, or end-of-string).
|
||||||
fn strip_prefix_ci<'a>(text: &'a str, prefix: &str) -> Option<&'a str> {
|
fn strip_prefix_ci<'a>(text: &'a str, prefix: &str) -> Option<&'a str> {
|
||||||
if text.len() < prefix.len() {
|
let candidate = text.get(..prefix.len())?;
|
||||||
return None;
|
if !candidate.eq_ignore_ascii_case(prefix) {
|
||||||
}
|
|
||||||
if !text[..prefix.len()].eq_ignore_ascii_case(prefix) {
|
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
let rest = &text[prefix.len()..];
|
let rest = &text[prefix.len()..];
|
||||||
@@ -451,6 +449,22 @@ pub(crate) mod tests {
|
|||||||
assert_eq!(strip_prefix_ci("hello", "hello"), Some(""));
|
assert_eq!(strip_prefix_ci("hello", "hello"), Some(""));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn strip_prefix_ci_multibyte_no_panic_smart_quote() {
|
||||||
|
// "abcde\u{2019}xyz" — U+2019 is 3 bytes starting at byte 5.
|
||||||
|
// A prefix of length 6 (e.g. "abcdef") lands inside the 3-byte char.
|
||||||
|
// Previously this caused: "byte index 6 is not a char boundary".
|
||||||
|
let text = "abcde\u{2019}xyz";
|
||||||
|
assert_eq!(strip_prefix_ci(text, "abcdef"), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn strip_prefix_ci_multibyte_no_panic_emoji() {
|
||||||
|
// U+1F600 is 4 bytes starting at byte 3. Prefix length 4 lands inside it.
|
||||||
|
let text = "abc\u{1F600}def";
|
||||||
|
assert_eq!(strip_prefix_ci(text, "abcd"), None);
|
||||||
|
}
|
||||||
|
|
||||||
// -- commands registry --------------------------------------------------
|
// -- commands registry --------------------------------------------------
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
Reference in New Issue
Block a user