Index: net/base/mime_sniffer.cc |
diff --git a/net/base/mime_sniffer.cc b/net/base/mime_sniffer.cc |
index 907c7c4f0998947e2c91a41dbbc1f29e75d7de88..668e89831f80837dd25793cc155835143eb14692 100644 |
--- a/net/base/mime_sniffer.cc |
+++ b/net/base/mime_sniffer.cc |
@@ -344,8 +344,10 @@ static bool MatchMagicNumber(const char* content, |
bool match = false; |
if (magic_entry.is_string) { |
if (content_strlen >= len) { |
- // String comparisons are case-insensitive |
- match = (base::strncasecmp(magic_entry.magic, content, len) == 0); |
+ // Do a case-insensitive prefix comparison. |
+ DCHECK_EQ(strlen(magic_entry.magic), len); |
+ match = base::EqualsCaseInsensitiveASCII(magic_entry.magic, |
+ base::StringPiece(content, len)); |
} |
} else { |
if (size >= len) { |
@@ -462,11 +464,12 @@ static bool SniffForOfficeDocs(const char* content, |
if (url_path.length() < kOfficeExtensionTypes[i].extension_len) |
continue; |
- const char* extension = |
- &url_path[url_path.length() - kOfficeExtensionTypes[i].extension_len]; |
- |
- if (0 == base::strncasecmp(extension, kOfficeExtensionTypes[i].extension, |
- kOfficeExtensionTypes[i].extension_len)) { |
+ base::StringPiece extension = base::StringPiece(url_path).substr( |
+ url_path.length() - kOfficeExtensionTypes[i].extension_len); |
+ if (base::EqualsCaseInsensitiveASCII( |
+ extension, |
+ base::StringPiece(kOfficeExtensionTypes[i].extension, |
+ kOfficeExtensionTypes[i].extension_len))) { |
type = kOfficeExtensionTypes[i].doc_type; |
break; |
} |
@@ -608,14 +611,22 @@ static bool SniffXML(const char* content, |
if (!pos) |
return false; |
- if ((pos + sizeof("<?xml") - 1 <= end) && |
- (base::strncasecmp(pos, "<?xml", sizeof("<?xml") - 1) == 0)) { |
+ static const char kXmlPrefix[] = "<?xml"; |
+ static const size_t kXmlPrefixLength = arraysize(kXmlPrefix) - 1; |
+ static const char kDocTypePrefix[] = "<!DOCTYPE"; |
+ static const size_t kDocTypePrefixLength = arraysize(kDocTypePrefix) - 1; |
+ |
+ if ((pos + kXmlPrefixLength <= end) && |
+ base::EqualsCaseInsensitiveASCII( |
+ base::StringPiece(pos, kXmlPrefixLength), |
+ base::StringPiece(kXmlPrefix, kXmlPrefixLength))) { |
// Skip XML declarations. |
++pos; |
continue; |
- } else if ((pos + sizeof("<!DOCTYPE") - 1 <= end) && |
- (base::strncasecmp(pos, "<!DOCTYPE", sizeof("<!DOCTYPE") - 1) == |
- 0)) { |
+ } else if ((pos + kDocTypePrefixLength <= end) && |
+ base::EqualsCaseInsensitiveASCII( |
+ base::StringPiece(pos, kDocTypePrefixLength), |
+ base::StringPiece(kDocTypePrefix, kDocTypePrefixLength))) { |
// Skip DOCTYPE declarations. |
++pos; |
continue; |