summaryrefslogtreecommitdiffstats
path: root/toolkit/components/reputationservice/test/gtest/TestExecutableLists.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/reputationservice/test/gtest/TestExecutableLists.cpp')
-rw-r--r--toolkit/components/reputationservice/test/gtest/TestExecutableLists.cpp376
1 files changed, 376 insertions, 0 deletions
diff --git a/toolkit/components/reputationservice/test/gtest/TestExecutableLists.cpp b/toolkit/components/reputationservice/test/gtest/TestExecutableLists.cpp
new file mode 100644
index 0000000000..3c24221b87
--- /dev/null
+++ b/toolkit/components/reputationservice/test/gtest/TestExecutableLists.cpp
@@ -0,0 +1,376 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/3.0/ */
+
+#include "gtest/gtest.h"
+#include "mozilla/ArrayUtils.h"
+#include "nsLocalFileCommon.h"
+#include "ApplicationReputation.h"
+
+// PLEASE read the comment in ApplicationReputation.cpp before modifying this
+// list.
+static const char* const kTestFileExtensions[] = {
+ ".accda", // MS Access database
+ ".accdb", // MS Access database
+ ".accde", // MS Access database
+ ".accdr", // MS Access database
+ ".action", // Nac script
+ ".ad", // Windows (ignored for app rep)
+ ".ade", // MS Access
+ ".adp", // MS Access
+ ".afploc", // Apple Filing Protocol Location (ignored for app rep)
+ ".air", // Adobe Air (ignored for app rep)
+ ".apk", // Android package
+ ".app", // Executable application
+ ".applescript",
+ ".application", // MS ClickOnce
+ ".appref-ms", // MS ClickOnce
+ ".as", // Mac archive
+ ".asp", // Windows Server script
+ ".asx", // Windows Media Player
+ ".atloc", // Appletalk Location (ignored for app rep)
+ ".bas", // Basic script
+ ".bash", // Linux shell
+ ".bat", // Windows shell
+ ".bin",
+ ".btapp", // uTorrent and Transmission
+ ".btinstall", // uTorrent and Transmission
+ ".btkey", // uTorrent and Transmission
+ ".btsearch", // uTorrent and Transmission
+ ".btskin", // uTorrent and Transmission
+ ".bz", // Linux archive (bzip)
+ ".bz2", // Linux archive (bzip2)
+ ".bzip2", // Linux archive (bzip2)
+ ".cab", // Windows archive
+ ".caction", // Automator action
+ ".cdr", // Mac disk image
+ ".cer", // Signed certificate file
+ ".cfg", // Windows
+ ".chi", // Windows Help
+ ".chm", // Windows Help
+ ".class", // Java
+ ".cmd", // Windows executable
+ ".com", // Windows executable
+ ".command", // Mac script
+ ".configprofile", // Configuration file for Apple systems
+ ".cpgz", // Mac archive
+ ".cpi", // Control Panel Item. Executable used for adding icons
+ // to Control Panel
+ ".cpl", // Windows executable
+ ".crt", // Windows signed certificate
+ ".crx", // Chrome extensions
+ ".csh", // Linux shell
+ ".dart", // Mac disk image
+ ".dc42", // Apple DiskCopy Image
+ ".deb", // Linux package
+ ".definition", // Automator action
+ ".der", // Signed certificate file
+ ".desktop", // A shortcut that runs other files
+ ".dex", // Android
+ ".dht", // HTML
+ ".dhtm", // HTML
+ ".dhtml", // HTML
+ ".diskcopy42", // Apple DiskCopy Image
+ ".dll", // Windows executable
+ ".dmg", // Mac disk image
+ ".dmgpart", // Mac disk image
+ ".doc", // MS Office
+ ".docb", // MS Office
+ ".docm", // MS Word
+ ".docx", // MS Word
+ ".dot", // MS Word
+ ".dotm", // MS Word
+ ".dott", // MS Office
+ ".dotx", // MS Word
+ ".drv", // Windows driver
+ ".dvdr", // Mac Disk image
+ ".dylib", // Mach object dynamic library file
+ ".efi", // Firmware
+ ".eml", // MS Outlook
+ ".exe", // Windows executable
+ ".fileloc", // Apple finder internet location data file
+ ".fon", // Windows font
+ ".ftploc", // Apple FTP Location (ignored for app rep)
+ ".fxp", // MS FoxPro
+ ".gadget", // Windows
+ ".grp", // Windows
+ ".gz", // Linux archive (gzip)
+ ".gzip", // Linux archive (gzip)
+ ".hfs", // Mac disk image
+ ".hlp", // Windows Help
+ ".hqx", // Mac archive
+ ".hta", // HTML trusted application
+ ".htm", ".html",
+ ".htt", // MS HTML template
+ ".img", // Mac disk image
+ ".imgpart", // Mac disk image
+ ".inetloc", // Apple finder internet location data file
+ ".inf", // Windows installer
+ ".ini", // Generic config file
+ ".ins", // IIS config
+ ".internetconnect", // Configuration file for Apple system
+ ".iso", // CD image
+ ".isp", // IIS config
+ ".jar", // Java
+ ".jnlp", // Java
+ ".js", // JavaScript script
+ ".jse", // JScript
+ ".ksh", // Linux shell
+ ".lnk", // Windows
+ ".local", // Windows
+ ".mad", // MS Access
+ ".maf", // MS Access
+ ".mag", // MS Access
+ ".mam", // MS Access
+ ".manifest", // Windows
+ ".maq", // MS Access
+ ".mar", // MS Access
+ ".mas", // MS Access
+ ".mat", // MS Access
+ ".mau", // Media attachment
+ ".mav", // MS Access
+ ".maw", // MS Access
+ ".mda", // MS Access
+ ".mdb", // MS Access
+ ".mde", // MS Access
+ ".mdt", // MS Access
+ ".mdw", // MS Access
+ ".mdz", // MS Access
+ ".mht", // MS HTML
+ ".mhtml", // MS HTML
+ ".mim", // MS Mail
+ ".mmc", // MS Office
+ ".mobileconfig", // Configuration file for Apple systems
+ ".mof", // Windows
+ ".mpkg", // Mac installer
+ ".msc", // Windows executable
+ ".msg", // MS Outlook
+ ".msh", // Windows shell
+ ".msh1", // Windows shell
+ ".msh1xml", // Windows shell
+ ".msh2", // Windows shell
+ ".msh2xml", // Windows shell
+ ".mshxml", // Windows
+ ".msi", // Windows installer
+ ".msp", // Windows installer
+ ".mst", // Windows installer
+ ".ndif", // Mac disk image
+ ".networkconnect", // Configuration file for Apple system
+ ".ocx", // ActiveX
+ ".ops", // MS Office
+ ".osas", // AppleScript
+ ".osax", // AppleScript
+ ".oxt", // OpenOffice extension, can execute arbitrary code
+ ".partial", // Downloads
+ ".pax", // Mac archive
+ ".pcd", // Microsoft Visual Test
+ ".pdf", // Adobe Acrobat
+ ".pet", // Linux package
+ ".pif", // Windows
+ ".pkg", // Mac installer
+ ".pl", // Perl script
+ ".plg", // MS Visual Studio
+ ".pot", // MS PowerPoint
+ ".potm", // MS PowerPoint
+ ".potx", // MS PowerPoint
+ ".ppam", // MS PowerPoint
+ ".pps", // MS PowerPoint
+ ".ppsm", // MS PowerPoint
+ ".ppsx", // MS PowerPoint
+ ".ppt", // MS PowerPoint
+ ".pptm", // MS PowerPoint
+ ".pptx", // MS PowerPoint
+ ".prf", // MS Outlook
+ ".prg", // Windows
+ ".ps1", // Windows shell
+ ".ps1xml", // Windows shell
+ ".ps2", // Windows shell
+ ".ps2xml", // Windows shell
+ ".psc1", // Windows shell
+ ".psc2", // Windows shell
+ ".pst", // MS Outlook
+ ".pup", // Linux package
+ ".py", // Python script
+ ".pyc", // Python binary
+ ".pyd", // Equivalent of a DLL, for python libraries
+ ".pyo", // Compiled python code
+ ".pyw", // Python GUI
+ ".rb", // Ruby script
+ ".reg", // Windows Registry
+ ".rels", // MS Office
+ ".rpm", // Linux package
+ ".rtf", // MS Office
+ ".scf", // Windows shell
+ ".scpt", // AppleScript
+ ".scptd", // AppleScript
+ ".scr", // Windows
+ ".sct", // Windows shell
+ ".search-ms", // Windows
+ ".seplugin", // AppleScript
+ ".service", // Systemd service unit file
+ ".settingcontent-ms", // Windows settings
+ ".sh", // Linux shell
+ ".shar", // Linux shell
+ ".shb", // Windows
+ ".shs", // Windows shell
+ ".sht", // HTML
+ ".shtm", // HTML
+ ".shtml", // HTML
+ ".sldm", // MS PowerPoint
+ ".sldx", // MS PowerPoint
+ ".slk", // MS Excel
+ ".slp", // Linux package
+ ".smi", // Mac disk image
+ ".sparsebundle", // Mac disk image
+ ".sparseimage", // Mac disk image
+ ".spl", // Adobe Flash
+ ".svg",
+ ".swf", // Adobe Flash
+ ".swm", // Windows Imaging
+ ".sys", // Windows
+ ".tar", // Linux archive
+ ".taz", // Linux archive (bzip2)
+ ".tbz", // Linux archive (bzip2)
+ ".tbz2", // Linux archive (bzip2)
+ ".tcsh", // Linux shell
+ ".tgz", // Linux archive (gzip)
+ ".torrent", // Bittorrent
+ ".tpz", // Linux archive (gzip)
+ ".txz", // Linux archive (xz)
+ ".tz", // Linux archive (gzip)
+ ".udf", // MS Excel
+ ".udif", // Mac disk image
+ ".url", // Windows
+ ".vb", // Visual Basic script
+ ".vbe", // Visual Basic script
+ ".vbs", // Visual Basic script
+ ".vdx", // MS Visio
+ ".vhd", // Windows virtual hard drive
+ ".vhdx", // Windows virtual hard drive
+ ".vmdk", // VMware virtual disk
+ ".vsd", // MS Visio
+ ".vsdm", // MS Visio
+ ".vsdx", // MS Visio
+ ".vsmacros", // MS Visual Studio
+ ".vss", // MS Visio
+ ".vssm", // MS Visio
+ ".vssx", // MS Visio
+ ".vst", // MS Visio
+ ".vstm", // MS Visio
+ ".vstx", // MS Visio
+ ".vsw", // MS Visio
+ ".vsx", // MS Visio
+ ".vtx", // MS Visio
+ ".webloc", // MacOS website location file
+ ".website", // Windows
+ ".wflow", // Automator action
+ ".wim", // Windows Imaging
+ ".workflow", // Mac Automator
+ ".ws", // Windows script
+ ".wsc", // Windows script
+ ".wsf", // Windows script
+ ".wsh", // Windows script
+ ".xar", // MS Excel
+ ".xbap", // XAML Browser Application
+ ".xht", ".xhtm", ".xhtml",
+ ".xip", // Mac archive
+ ".xla", // MS Excel
+ ".xlam", // MS Excel
+ ".xldm", // MS Excel
+ ".xll", // MS Excel
+ ".xlm", // MS Excel
+ ".xls", // MS Excel
+ ".xlsb", // MS Excel
+ ".xlsm", // MS Excel
+ ".xlsx", // MS Excel
+ ".xlt", // MS Excel
+ ".xltm", // MS Excel
+ ".xltx", // MS Excel
+ ".xlw", // MS Excel
+ ".xml", // MS Excel
+ ".xnk", // MS Exchange
+ ".xrm-ms", // Windows
+ ".xsd", // XML schema definition
+ ".xsl", // XML Stylesheet
+ ".xz", // Linux archive (xz)
+ ".z", // InstallShield
+#ifdef XP_WIN // disable on Mac/Linux, see 1167493
+ ".zip", // Generic archive
+#endif
+ ".zipx", // WinZip
+};
+
+#define CheckListSorted(_list) \
+ { \
+ for (size_t i = 1; i < mozilla::ArrayLength(_list); ++i) { \
+ nsDependentCString str1((_list)[i - 1]); \
+ nsDependentCString str2((_list)[i]); \
+ EXPECT_LE(Compare(str1, str2), -1) \
+ << "Expected " << str1.get() << " to be sorted after " \
+ << str2.get(); \
+ } \
+ }
+
+// First, verify that the 2 lists are both sorted. This helps when checking for
+// duplicates manually, ensures we could start doing more efficient lookups if
+// we felt that was necessary (e.g. if the lists get much bigger), and that it's
+// easy for humans to find things...
+TEST(TestExecutableLists, ListsAreSorted)
+{
+ CheckListSorted(sExecutableExts);
+ CheckListSorted(ApplicationReputationService::kBinaryFileExtensions);
+ CheckListSorted(ApplicationReputationService::kNonBinaryExecutables);
+ CheckListSorted(kTestFileExtensions);
+}
+
+bool _IsInList(const char* ext, const char* const _list[], const size_t len) {
+ nsDependentCString extStr(ext);
+ for (size_t i = 0; i < len; ++i) {
+ if (extStr.EqualsASCII(_list[i])) {
+ return true;
+ }
+ }
+ return false;
+}
+
+#define IsInList(_ext, _list) \
+ _IsInList(_ext, _list, mozilla::ArrayLength(_list))
+
+TEST(TestExecutableLists, NonBinariesInExecutablesList)
+{
+ for (auto nonBinary : ApplicationReputationService::kNonBinaryExecutables) {
+ EXPECT_TRUE(IsInList(nonBinary, sExecutableExts))
+ << "Expected " << nonBinary << " to be part of sExecutableExts list";
+ }
+}
+
+TEST(TestExecutableLists, AllExtensionsInTestList)
+{
+ for (auto ext : ApplicationReputationService::kBinaryFileExtensions) {
+ EXPECT_TRUE(IsInList(ext, kTestFileExtensions))
+ << "Expected binary extension " << ext
+ << " to be listed in the test extension list";
+ }
+
+ for (auto ext : sExecutableExts) {
+ EXPECT_TRUE(IsInList(ext, kTestFileExtensions))
+ << "Expected executable extension " << ext
+ << " to be listed in the test extension list";
+ }
+
+ for (auto ext : ApplicationReputationService::kNonBinaryExecutables) {
+ EXPECT_TRUE(IsInList(ext, kTestFileExtensions))
+ << "Expected non-binary executable extension " << ext
+ << " to be listed in the test extension list";
+ }
+}
+
+TEST(TestExecutableLists, TestListExtensionsExistSomewhere)
+{
+ for (auto ext : kTestFileExtensions) {
+ EXPECT_TRUE(
+ IsInList(ext, ApplicationReputationService::kBinaryFileExtensions) !=
+ IsInList(ext, sExecutableExts))
+ << "Expected test extension " << ext
+ << " to be in exactly one of the other lists.";
+ }
+}