Skip to content

Commit 755795d

Browse files
authored
fix: don't warn on .text() usage with image/svg+xml (#6269)
1 parent 8c41032 commit 755795d

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

src/workerd/util/mimetype-test.c++

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,27 @@ KJ_TEST("WHATWG tests") {
387387
KJ_ASSERT(MimeType::isText(MimeType::XJAVASCRIPT));
388388
KJ_ASSERT(MimeType::isText(
389389
KJ_ASSERT_NONNULL(MimeType::tryParse("application/json; charset=\"utf-8\""_kj))));
390+
391+
auto svgMime = KJ_ASSERT_NONNULL(MimeType::tryParse("image/svg+xml"_kj));
392+
KJ_ASSERT(MimeType::isXml(svgMime));
393+
KJ_ASSERT(MimeType::isText(svgMime));
394+
395+
auto svgMimeWithCharset =
396+
KJ_ASSERT_NONNULL(MimeType::tryParse("image/svg+xml; charset=utf-8"_kj));
397+
KJ_ASSERT(MimeType::isXml(svgMimeWithCharset));
398+
KJ_ASSERT(MimeType::isText(svgMimeWithCharset));
399+
400+
KJ_ASSERT(MimeType::isXml(MimeType::XHTML));
401+
402+
auto atomXml = KJ_ASSERT_NONNULL(MimeType::tryParse("application/atom+xml"_kj));
403+
KJ_ASSERT(MimeType::isXml(atomXml));
404+
405+
auto textXml = KJ_ASSERT_NONNULL(MimeType::tryParse("text/xml"_kj));
406+
KJ_ASSERT(MimeType::isXml(textXml));
407+
auto appXml = KJ_ASSERT_NONNULL(MimeType::tryParse("application/xml"_kj));
408+
KJ_ASSERT(MimeType::isXml(appXml));
409+
auto imageXml = KJ_ASSERT_NONNULL(MimeType::tryParse("image/xml"_kj));
410+
KJ_ASSERT(!MimeType::isXml(imageXml));
390411
}
391412

392413
KJ_TEST("Extract Mime Type") {

src/workerd/util/mimetype.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,11 @@ class MimeType final {
113113
static constexpr bool isXml(const T& mimeType) {
114114
auto type = mimeType.type();
115115
auto subtype = mimeType.subtype();
116-
return (type == "text" || type == "application") &&
117-
(subtype == "xml" || subtype.endsWith("+xml"));
116+
// Bare "xml" subtype is only valid for text/xml and application/xml.
117+
// The "+xml" structured syntax suffix (RFC 6838 §4.2.8, RFC 6839) indicates
118+
// XML-based content regardless of top-level type (e.g. image/svg+xml).
119+
return ((type == "text" || type == "application") && subtype == "xml") ||
120+
subtype.endsWith("+xml");
118121
}
119122

120123
template <IsMimeType T>

0 commit comments

Comments
 (0)