From 1c910da749d785178632ba17697e86c61b34f877 Mon Sep 17 00:00:00 2001 From: CYBAI Date: Mon, 2 Mar 2020 11:04:35 +0900 Subject: [PATCH 1/2] Upgrade mime to 0.3.16 --- Cargo.lock | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 94eb51febd6..e3ac09be7ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3465,12 +3465,9 @@ dependencies = [ [[package]] name = "mime" -version = "0.3.13" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e27ca21f40a310bd06d9031785f4801710d566c184a6e15bad4f1d9b65f9425" -dependencies = [ - "unicase", -] +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "mime_guess" From 5245921c5c5c97422825a0f44ba75147dbdf723d Mon Sep 17 00:00:00 2001 From: CYBAI Date: Mon, 2 Mar 2020 11:05:10 +0900 Subject: [PATCH 2/2] Use `essence` algorithm from mime crate --- components/script/script_module.rs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/components/script/script_module.rs b/components/script/script_module.rs index bf2eafd5b42..b9eda4c2ee6 100644 --- a/components/script/script_module.rs +++ b/components/script/script_module.rs @@ -56,6 +56,7 @@ use js::rust::wrappers::JS_SetPendingException; use js::rust::CompileOptionsWrapper; use js::rust::IntoHandle; use js::rust::{Handle, HandleValue}; +use mime::Mime; use net_traits::request::{CredentialsMode, Destination, ParserMetadata}; use net_traits::request::{Referrer, RequestBuilder, RequestMode}; use net_traits::{FetchMetadata, Metadata}; @@ -68,6 +69,7 @@ use std::ffi; use std::marker::PhantomData; use std::ptr; use std::rc::Rc; +use std::str::FromStr; use std::sync::{Arc, Mutex}; use url::ParseError as UrlParseError; @@ -934,15 +936,20 @@ impl FetchResponseListener for ModuleContext { let meta = self.metadata.take().unwrap(); if let Some(content_type) = meta.content_type.map(Serde::into_inner) { - let c = content_type.to_string(); - // The MIME crate includes params (e.g. charset=utf8) in the to_string - // https://github.com/hyperium/mime/issues/120 - if let Some(ty) = c.split(';').next() { - if !SCRIPT_JS_MIMES.contains(&ty) { - return Err(NetworkError::Internal(format!("Invalid MIME type: {}", ty))); + if let Ok(content_type) = Mime::from_str(&content_type.to_string()) { + let essence_mime = content_type.essence_str(); + + if !SCRIPT_JS_MIMES.contains(&essence_mime) { + return Err(NetworkError::Internal(format!( + "Invalid MIME type: {}", + essence_mime + ))); } } else { - return Err(NetworkError::Internal("Empty MIME type".into())); + return Err(NetworkError::Internal(format!( + "Failed to parse MIME type: {}", + content_type.to_string() + ))); } } else { return Err(NetworkError::Internal("No MIME type".into()));