Properly escape anchor names (#1908)

This commit is contained in:
Phil Lord 2022-06-21 18:08:16 +01:00 committed by GitHub
parent afc6a71a79
commit 4f6a1c6bcc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,4 +1,5 @@
use libs::regex::Regex;
use libs::regex::escape;
pub fn has_anchor_id(content: &str, anchor: &str) -> bool {
let checks = anchor_id_checks(anchor);
@ -6,7 +7,8 @@ pub fn has_anchor_id(content: &str, anchor: &str) -> bool {
}
fn anchor_id_checks(anchor: &str) -> Regex {
Regex::new(&format!(r#"\s(?i)(id|name) *= *("|')*{}("|'| |>)+"#, anchor)).unwrap()
Regex::new(&format!(r#"\s(?i)(id|name) *= *("|')*{}("|'| |>)+"#,
escape(anchor))).unwrap()
}
#[cfg(test)]
@ -44,7 +46,11 @@ mod tests {
assert!(m(r#"<a
id="fred">"#));
// Escaped Anchors
assert!(check("fred?george", r#"<a id="fred?george">"#));
assert!(check("fred.george", r#"<a id="fred.george">"#));
// Non matchers
assert!(!m(r#"<a notid="fred">"#))
assert!(!m(r#"<a notid="fred">"#));
}
}