File tree Expand file tree Collapse file tree 2 files changed +26
-2
lines changed
Expand file tree Collapse file tree 2 files changed +26
-2
lines changed Original file line number Diff line number Diff 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
392413KJ_TEST (" Extract Mime Type" ) {
Original file line number Diff line number Diff 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>
You can’t perform that action at this time.
0 commit comments