html: Take a reference to SanitizerConfig for Html::sanitize_with

Allows to reuse the configuration without cloning it.
This commit is contained in:
Kévin Commaille 2024-05-02 16:56:22 +02:00 committed by Kévin Commaille
parent 8ecbc47e55
commit 18244143ca
5 changed files with 19 additions and 18 deletions

View File

@ -4,6 +4,7 @@ Breaking Changes:
- Do not export `Node` in the public API, it is not usable on its own and it is
not in the output of any public method.
- `Html::sanitize_with` now takes a reference to `SanitizerConfig`.
Improvements:

View File

@ -24,7 +24,7 @@ pub fn sanitize_html(
config = config.remove_reply_fallback();
}
sanitize_inner(s, config)
sanitize_inner(s, &config)
}
/// What HTML [tags and attributes] should be kept by the sanitizer.
@ -62,10 +62,10 @@ pub enum RemoveReplyFallback {
/// [rich reply fallback]: https://spec.matrix.org/latest/client-server-api/#fallbacks-for-rich-replies
pub fn remove_html_reply_fallback(s: &str) -> String {
let config = SanitizerConfig::new().remove_reply_fallback();
sanitize_inner(s, config)
sanitize_inner(s, &config)
}
fn sanitize_inner(s: &str, config: SanitizerConfig) -> String {
fn sanitize_inner(s: &str, config: &SanitizerConfig) -> String {
let mut html = Html::parse(s);
html.sanitize_with(config);
html.to_string()

View File

@ -44,11 +44,11 @@ impl Html {
/// `SanitizerConfig::compat().remove_reply_fallback()`.
pub fn sanitize(&mut self) {
let config = SanitizerConfig::compat().remove_reply_fallback();
self.sanitize_with(config);
self.sanitize_with(&config);
}
/// Sanitize this HTML according to the given configuration.
pub fn sanitize_with(&mut self, config: SanitizerConfig) {
pub fn sanitize_with(&mut self, config: &SanitizerConfig) {
config.clean(self);
}

View File

@ -95,7 +95,7 @@ impl SanitizerConfig {
}
/// Clean the given HTML with this sanitizer.
pub(crate) fn clean(self, html: &mut Html) {
pub(crate) fn clean(&self, html: &mut Html) {
let root = html.root();
let mut next_child = root.first_child;

View File

@ -11,7 +11,7 @@ fn valid_input() {
<code class=\"language-html\">&lt;mx-reply&gt;This is a fake reply&lt;/mx-reply&gt;</code>\
",
);
html.sanitize_with(config);
html.sanitize_with(&config);
assert_eq!(
html.to_string(),
@ -41,7 +41,7 @@ fn tags_remove() {
<p>But this is inside a tag</p>\
",
);
html.sanitize_with(config);
html.sanitize_with(&config);
assert_eq!(
html.to_string(),
@ -77,7 +77,7 @@ fn tags_remove_without_reply() {
<p>But this is inside a tag</p>\
",
);
html.sanitize_with(config);
html.sanitize_with(&config);
assert_eq!(
html.to_string(),
@ -105,7 +105,7 @@ fn tags_remove_only_reply_fallback() {
<p>But this is inside a tag</p>\
",
);
html.sanitize_with(config);
html.sanitize_with(&config);
assert_eq!(
html.to_string(),
@ -125,7 +125,7 @@ fn attrs_remove() {
<p class=\"important\">Look at <span data-mx-color=\"#0000ff\" size=20>me!</span></p>\
",
);
html.sanitize_with(config);
html.sanitize_with(&config);
assert_eq!(
html.to_string(),
@ -145,7 +145,7 @@ fn img_remove_scheme() {
<img src=\"https://notareal.hs/abcdef\">\
",
);
html.sanitize_with(config);
html.sanitize_with(&config);
assert_eq!(html.to_string(), "<p>Look at that picture:</p>");
}
@ -158,7 +158,7 @@ fn link_remove_scheme() {
<p>Go see <a href=\"file://local/file.html\">my local website</a></p>\
",
);
html.sanitize_with(config);
html.sanitize_with(&config);
assert_eq!(
html.to_string(),
@ -177,7 +177,7 @@ fn link_compat_scheme() {
<p>To talk about <a href=\"https://mycat.org\">my cat</a></p>\
",
);
html.sanitize_with(config);
html.sanitize_with(&config);
assert_eq!(
html.to_string(),
"\
@ -193,7 +193,7 @@ fn link_compat_scheme() {
<p>To talk about <a href=\"https://mycat.org\">my cat</a></p>\
",
);
html.sanitize_with(config);
html.sanitize_with(&config);
assert_eq!(
html.to_string(),
"\
@ -214,7 +214,7 @@ fn class_remove() {
<p>What do you think of the name <code class=\"fake-language-rust\">StringList</code>?</p>\
",
);
html.sanitize_with(config);
html.sanitize_with(&config);
assert_eq!(
html.to_string(),
@ -240,7 +240,7 @@ fn depth_remove() {
.collect();
let mut html = Html::parse(&deeply_nested_html);
html.sanitize_with(config);
html.sanitize_with(&config);
let res = html.to_string();
assert!(res.contains("I should be fine."));
@ -255,7 +255,7 @@ fn replace_deprecated() {
<p>Look at <strike>you </strike><font data-mx-bg-color=\"#ff0000\" color=\"#0000ff\">me!</span></p>\
",
);
html.sanitize_with(config);
html.sanitize_with(&config);
assert_eq!(
html.to_string(),