diff --git a/internal/reader/icon/finder.go b/internal/reader/icon/finder.go index f7669d07..343e80f4 100644 --- a/internal/reader/icon/finder.go +++ b/internal/reader/icon/finder.go @@ -194,6 +194,8 @@ func parseImageDataURL(value string) (*model.Icon, error) { return nil, fmt.Errorf(`icon: unable to decode data URL %q`, value) } blob = []byte(decodedData) + case "utf8": + blob = []byte(data) default: return nil, fmt.Errorf(`icon: unsupported data URL encoding %q`, value) } diff --git a/internal/reader/icon/finder_test.go b/internal/reader/icon/finder_test.go index 7bc8c3e8..2ea297c1 100644 --- a/internal/reader/icon/finder_test.go +++ b/internal/reader/icon/finder_test.go @@ -44,6 +44,26 @@ func TestParseImageDataURLWithNoEncoding(t *testing.T) { } } +func TestParseImageWithRawSVGEncodedInUTF8(t *testing.T) { + iconURL := `data:image/svg+xml;utf8,` + icon, err := parseImageDataURL(iconURL) + if err != nil { + t.Fatalf(`We should be able to parse valid data URL: %v`, err) + } + + if icon.MimeType != "image/svg+xml" { + t.Fatal(`Invalid mime type parsed`) + } + + if icon.Hash == "" { + t.Fatal(`Image hash should be computed`) + } + + if string(icon.Content) != `` { + t.Fatal(`Invalid SVG content`) + } +} + func TestParseImageDataURLWithNoMediaTypeAndNoEncoding(t *testing.T) { iconURL := `data:,Hello%2C%20World%21` _, err := parseImageDataURL(iconURL)