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("![alt](data:image/svg+xml,%3csvg%3e%3c/svg%3e)");
+        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)