Index: net/base/mime_util.cc |
diff --git a/net/base/mime_util.cc b/net/base/mime_util.cc |
index ae4781a68ae8278d7dbbd44353184d84ab82292d..27c547b6e0b371769e563dcab9239773ead952dd 100644 |
--- a/net/base/mime_util.cc |
+++ b/net/base/mime_util.cc |
@@ -116,8 +116,11 @@ const char* FindMimeType(const MimeInfo* mappings, |
const char* extensions = mappings[i].extensions; |
for (;;) { |
size_t end_pos = strcspn(extensions, ","); |
+ // The length check is required to prevent the StringPiece below from |
+ // including uninitialized memory if ext is longer than extensions. |
if (end_pos == ext.size() && |
- base::strncasecmp(extensions, ext.data(), ext.size()) == 0) |
+ base::EqualsCaseInsensitiveASCII( |
+ base::StringPiece(extensions, ext.size()), ext)) |
return mappings[i].mime_type; |
extensions += end_pos; |
if (!*extensions) |
@@ -268,13 +271,10 @@ bool MimeUtil::MatchesMimeType(const std::string& mime_type_pattern, |
const std::string::size_type star = base_pattern.find('*'); |
if (star == std::string::npos) { |
- if (base_pattern.size() == base_type.size() && |
- base::strncasecmp(base_pattern.data(), base_type.data(), |
- base_pattern.size()) == 0) { |
+ if (base::EqualsCaseInsensitiveASCII(base_pattern, base_type)) |
return MatchesMimeTypeParameters(mime_type_pattern, mime_type); |
- } else { |
+ else |
return false; |
- } |
} |
// Test length to prevent overlap between |left| and |right|. |