4
0
Эх сурвалжийг харах

feat(sanitizer): allow `img` tags with only a `srcset` and no `src` attribute

Frédéric Guillot 1 жил өмнө
parent
commit
462ba8d7f7

+ 2 - 2
internal/reader/sanitizer/sanitizer.go

@@ -296,9 +296,9 @@ func hasRequiredAttributes(tagName string, attributes []string) bool {
 	switch tagName {
 	case "a":
 		return slices.Contains(attributes, "href")
-	case "iframe", "img":
+	case "iframe":
 		return slices.Contains(attributes, "src")
-	case "source":
+	case "source", "img":
 		return slices.Contains(attributes, "src") || slices.Contains(attributes, "srcset")
 	default:
 		return true

+ 11 - 1
internal/reader/sanitizer/sanitizer_test.go

@@ -119,7 +119,7 @@ func TestImgWithDataURL(t *testing.T) {
 	}
 }
 
-func TestImgWithSrcset(t *testing.T) {
+func TestImgWithSrcsetAttribute(t *testing.T) {
 	input := `<img srcset="example-320w.jpg, example-480w.jpg 1.5x,   example-640w.jpg 2x, example-640w.jpg 640w" src="example-640w.jpg" alt="Example">`
 	expected := `<img srcset="http://example.org/example-320w.jpg, http://example.org/example-480w.jpg 1.5x, http://example.org/example-640w.jpg 2x, http://example.org/example-640w.jpg 640w" src="http://example.org/example-640w.jpg" alt="Example" loading="lazy">`
 	output := Sanitize("http://example.org/", input)
@@ -129,6 +129,16 @@ func TestImgWithSrcset(t *testing.T) {
 	}
 }
 
+func TestImgWithSrcsetAndNoSrcAttribute(t *testing.T) {
+	input := `<img srcset="example-320w.jpg, example-480w.jpg 1.5x,   example-640w.jpg 2x, example-640w.jpg 640w" alt="Example">`
+	expected := `<img srcset="http://example.org/example-320w.jpg, http://example.org/example-480w.jpg 1.5x, http://example.org/example-640w.jpg 2x, http://example.org/example-640w.jpg 640w" alt="Example" loading="lazy">`
+	output := Sanitize("http://example.org/", input)
+
+	if output != expected {
+		t.Errorf(`Wrong output: %s`, output)
+	}
+}
+
 func TestSourceWithSrcsetAndMedia(t *testing.T) {
 	input := `<picture><source media="(min-width: 800px)" srcset="elva-800w.jpg"></picture>`
 	expected := `<picture><source media="(min-width: 800px)" srcset="http://example.org/elva-800w.jpg"></picture>`