diff --git a/src/api/markdown.rs b/src/api/markdown.rs index 38ef356..76139f3 100644 --- a/src/api/markdown.rs +++ b/src/api/markdown.rs @@ -15,6 +15,7 @@ pub fn clean_html(input: &str) -> String { ]) .add_tags(&["details", "summary"]) .url_relative(ammonia::UrlRelative::PassThrough) + .add_url_schemes(&["data"]) .add_tag_attributes("a", &["class", "aria-hidden", "aria-label"]) .add_tag_attributes("span", &["class"]) .add_tag_attributes("h1", &["id", "class"]) @@ -384,4 +385,11 @@ mod tests { assert!(result.html.contains("
"));
assert!(result.html.contains("main"));
}
+
+ #[test]
+ fn render_markdown_data_uri_image() {
+ let result = render_markdown_enhanced("");
+ assert!(result.html.contains("data:image/svg+xml"), "data URI should be preserved in img src, got: {}", result.html);
+ assert!(result.html.contains("alt=\"alt\""));
+ }
}
diff --git a/src/components/post/post_content.rs b/src/components/post/post_content.rs
index 838d32a..7a57cdb 100644
--- a/src/components/post/post_content.rs
+++ b/src/components/post/post_content.rs
@@ -46,6 +46,10 @@ pub fn PostContent(content_html: String) -> Element {
let original_src = img_element.src();
let alt = img_element.alt();
+ if original_src.starts_with("data:") {
+ continue;
+ }
+
// Replace src with thumbnail version (add ?w=800)
let thumb_src = if original_src.contains('?') {
format!("{}&w=800", original_src)