Support SVG sources (closes #68)
check / check (push) Waiting to run

The fetcher accepts image/svg+xml; internal/magic detects SVG. orig of
an SVG at the orig size is the SVG unchanged, cached, with a
Content-Security-Policy allowing only its styles and data: images; at
another size, ErrSVGNotOriginalSize (400). Any other format renders it
at the least size covering the output, at most 8192 on a side, so it
stays sharp. Rendering refuses an SVG with a side over 8192 times the
other (ErrSVGTooThin, 415), and the orig size of one above 8192 on a
side (ErrSVGTooLargeForOrigSize, 400). The cache reads up to 1024 first
bytes to find a file's format. Tests pinning the SVG refusal now expect
SVG. Render time and memory are unbounded: P1 in TODO.md until the
owner decides on #68.

Model: opus-5-5
This commit is contained in:
clawbot committed 2026-11-11 16:42:08 +00:00
1 parent 092176d917
commit d47aea67b8
20 files changed
+945 -97

No files matched your search

+1
View File
@@ -124,6 +124,7 @@ func allowedContentTypes() []string {
imagerequest.FormatWebP.MIMEType(),
imagerequest.FormatAVIF.MIMEType(),
imagerequest.FormatJXL.MIMEType(),
imagerequest.FormatSVG.MIMEType(),
}
}
@@ -279,7 +279,7 @@ func TestDetectContentTypeFromPath(t *testing.T) {
{"foo/bar.gif", imagerequest.FormatGIF.MIMEType()},
{"foo/bar.webp", imagerequest.FormatWebP.MIMEType()},
{"foo/bar.avif", imagerequest.FormatAVIF.MIMEType()},
{"foo/bar.svg", contentTypeSVG},
{"foo/bar.svg", imagerequest.FormatSVG.MIMEType()},
{"foo/bar.bin", contentTypeOctetStream},
{"foo/bar", contentTypeOctetStream},
}
+4 -6
View File
@@ -67,11 +67,9 @@ func (m *MockFetcher) Fetch(
}, nil
}
// The content types the mock fetcher gives files in no format pixa reads.
const (
contentTypeSVG = "image/svg+xml"
contentTypeOctetStream = "application/octet-stream"
)
// contentTypeOctetStream is the content type the mock fetcher gives files in
// no format pixa reads.
const contentTypeOctetStream = "application/octet-stream"
// detectContentTypeFromPath returns the MIME type based on file extension.
func detectContentTypeFromPath(path string) string {
@@ -91,7 +89,7 @@ func detectContentTypeFromPath(path string) string {
case strings.HasSuffix(path, ".jxl"):
return imagerequest.FormatJXL.MIMEType()
case strings.HasSuffix(path, ".svg"):
return contentTypeSVG
return imagerequest.FormatSVG.MIMEType()
default:
return contentTypeOctetStream
}