Index: chrome/common/safe_browsing/download_protection_util.cc |
diff --git a/chrome/common/safe_browsing/download_protection_util.cc b/chrome/common/safe_browsing/download_protection_util.cc |
index 3358b893b1c90445d1e1468339a25e73348677ca..ab8630f801a9d29c6ae03d617d668e8c781b4ae2 100644 |
--- a/chrome/common/safe_browsing/download_protection_util.cc |
+++ b/chrome/common/safe_browsing/download_protection_util.cc |
@@ -16,33 +16,64 @@ bool IsArchiveFile(const base::FilePath& file) { |
} |
bool IsBinaryFile(const base::FilePath& file) { |
- return ( |
+ const base::FilePath::CharType* kSupportedBinaryFileTypes[] = { |
// Executable extensions for MS Windows. |
- file.MatchesExtension(FILE_PATH_LITERAL(".bas")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".bat")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".cab")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".cmd")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".com")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".exe")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".hta")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".msi")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".pif")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".reg")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".scr")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".url")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".vb")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".vbs")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".website")) || |
+ FILE_PATH_LITERAL(".cab"), |
+ FILE_PATH_LITERAL(".cmd"), |
+ FILE_PATH_LITERAL(".com"), |
+ FILE_PATH_LITERAL(".dll"), |
+ FILE_PATH_LITERAL(".exe"), |
+ FILE_PATH_LITERAL(".msc"), |
+ FILE_PATH_LITERAL(".msi"), |
+ FILE_PATH_LITERAL(".msp"), |
+ FILE_PATH_LITERAL(".mst"), |
+ FILE_PATH_LITERAL(".pif"), |
+ FILE_PATH_LITERAL(".scr"), |
+ // Not binary, but still contain executable code, or can be used to launch |
+ // other executables. |
+ FILE_PATH_LITERAL(".bas"), |
+ FILE_PATH_LITERAL(".bat"), |
+ FILE_PATH_LITERAL(".hta"), |
+ FILE_PATH_LITERAL(".js"), |
+ FILE_PATH_LITERAL(".jse"), |
+ FILE_PATH_LITERAL(".mht"), |
+ FILE_PATH_LITERAL(".mhtml"), |
+ FILE_PATH_LITERAL(".msh"), |
+ FILE_PATH_LITERAL(".msh1"), |
+ FILE_PATH_LITERAL(".msh1xml"), |
+ FILE_PATH_LITERAL(".msh2"), |
+ FILE_PATH_LITERAL(".msh2xml"), |
+ FILE_PATH_LITERAL(".mshxml"), |
+ FILE_PATH_LITERAL(".ps1"), |
+ FILE_PATH_LITERAL(".ps1xml"), |
+ FILE_PATH_LITERAL(".ps2"), |
+ FILE_PATH_LITERAL(".ps2xml"), |
+ FILE_PATH_LITERAL(".psc1"), |
+ FILE_PATH_LITERAL(".psc2"), |
+ FILE_PATH_LITERAL(".reg"), |
+ FILE_PATH_LITERAL(".scf"), |
+ FILE_PATH_LITERAL(".sct"), |
+ FILE_PATH_LITERAL(".url"), |
+ FILE_PATH_LITERAL(".vb"), |
+ FILE_PATH_LITERAL(".vbe"), |
+ FILE_PATH_LITERAL(".vbs"), |
+ FILE_PATH_LITERAL(".website"), |
+ FILE_PATH_LITERAL(".wsf"), |
// Chrome extensions and android APKs are also reported. |
- file.MatchesExtension(FILE_PATH_LITERAL(".crx")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".apk")) || |
+ FILE_PATH_LITERAL(".apk"), |
+ FILE_PATH_LITERAL(".crx"), |
// Mac extensions. |
- file.MatchesExtension(FILE_PATH_LITERAL(".dmg")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".pkg")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".osx")) || |
- file.MatchesExtension(FILE_PATH_LITERAL(".app")) || |
- // Archives _may_ contain binaries, we'll check in ExtractFileFeatures. |
- IsArchiveFile(file)); |
+ FILE_PATH_LITERAL(".app"), |
+ FILE_PATH_LITERAL(".dmg"), |
+ FILE_PATH_LITERAL(".osx"), |
+ FILE_PATH_LITERAL(".pkg"), |
+ }; |
+ for (const auto& extension : kSupportedBinaryFileTypes) |
+ if (file.MatchesExtension(extension)) |
+ return true; |
+ |
+ // Archives _may_ contain binaries, we'll check in ExtractFileFeatures. |
+ return IsArchiveFile(file); |
} |
ClientDownloadRequest::DownloadType GetDownloadType( |