diff --git a/src/backend/helpers/helpers.cpp b/src/backend/helpers/helpers.cpp index c8db8c64..ed2af9d6 100644 --- a/src/backend/helpers/helpers.cpp +++ b/src/backend/helpers/helpers.cpp @@ -32,7 +32,6 @@ #include #include #include -#include #include #include @@ -57,66 +56,10 @@ namespace loot { using namespace std; using boost::algorithm::replace_all; using boost::algorithm::replace_first; - using boost::regex; - using boost::regex_match; - using boost::regex_search; namespace karma = boost::spirit::karma; namespace fs = boost::filesystem; namespace lc = boost::locale; - /// REGEX expression definition - /// Each expression is composed of three parts: - /// 1. The marker string "version", "ver", "rev", "v" or "r" - /// 2. The version string itself. - - const char* regex1 = - "^(?:\\bversion\\b[ ]*(?:[:.\\-]?)|\\brevision\\b(?:[:.\\-]?))[ ]*" - "((?:alpha|beta|test|debug)?\\s*[-0-9a-zA-Z._+]+\\s*(?:alpha|beta|test|debug)?\\s*(?:[0-9]*))$" - ; - - const char* regex2 = - "(?:\\bversion\\b(?:[ :]?)|\\brevision\\b(?:[:.\\-]?))[ ]*" - "([0-9][-0-9a-zA-Z._]+\\+?)" - ; - - const char* regex3 = - "(?:\\bver(?:[:.]?)|\\brev(?:[:.]?))\\s*" - "([0-9][-0-9a-zA-Z._]*\\+?)" - ; - - // Matches "Updated: " for the Bashed patch - const char* regex4 = - "(?:Updated:)\\s*" - "([-0-9aAmMpP/ :]+)$" - ; - - // Matches isolated versions as last resort - const char* regex5 = - "(?:(?:\\bv|\\br)(?:\\s?)(?:[-.:])?(?:\\s*))" - "((?:(?:\\balpha\\b)?|(?:\\bbeta\\b)?)\\s*[0-9]+([-._]*(?!esp|esm)[0-9a-zA-Z]+)*\\+?)" - ; - - // Matches isolated versions as last resort - const char* regex6 = - "((?:(?:\\balpha\\b)?|(?:\\bbeta\\b)?)\\s*\\b[0-9][-0-9a-zA-Z._]*\\+?)$" - ; - - const char* regex7 = - "(^\\bmark\\b\\s*\\b[IVX0-9][-0-9a-zA-Z._+]*\\s*(?:alpha|beta|test|debug)?\\s*(?:[0-9]*)?)$" - ; - - /// Array used to try each of the expressions defined above using - /// an iteration for each of them. - const std::vector version_checks({ - regex(regex1, regex::ECMAScript | regex::icase), - regex(regex2, regex::ECMAScript | regex::icase), - regex(regex3, regex::ECMAScript | regex::icase), - regex(regex4, regex::ECMAScript | regex::icase), - regex(regex5, regex::ECMAScript | regex::icase), //This incorrectly identifies "OBSE v19" where 19 is any integer. - //regex(regex6, regex::ECMAScript | regex::icase), //This is responsible for metallicow's false positive. - regex(regex7, regex::ECMAScript | regex::icase) - }); - ////////////////////////////////////////////////////////////////////////// // Helper functions ////////////////////////////////////////////////////////////////////////// diff --git a/src/backend/plugin/plugin.cpp b/src/backend/plugin/plugin.cpp index 076db2ac..e5cd72dd 100644 --- a/src/backend/plugin/plugin.cpp +++ b/src/backend/plugin/plugin.cpp @@ -41,6 +41,59 @@ using boost::regex_search; using boost::smatch; namespace loot { + /// REGEX expression definition + /// Each expression is composed of three parts: + /// 1. The marker string "version", "ver", "rev", "v" or "r" + /// 2. The version string itself. + + const char* regex1 = + "^(?:\\bversion\\b[ ]*(?:[:.\\-]?)|\\brevision\\b(?:[:.\\-]?))[ ]*" + "((?:alpha|beta|test|debug)?\\s*[-0-9a-zA-Z._+]+\\s*(?:alpha|beta|test|debug)?\\s*(?:[0-9]*))$" + ; + + const char* regex2 = + "(?:\\bversion\\b(?:[ :]?)|\\brevision\\b(?:[:.\\-]?))[ ]*" + "([0-9][-0-9a-zA-Z._]+\\+?)" + ; + + const char* regex3 = + "(?:\\bver(?:[:.]?)|\\brev(?:[:.]?))\\s*" + "([0-9][-0-9a-zA-Z._]*\\+?)" + ; + + // Matches "Updated: " for the Bashed patch + const char* regex4 = + "(?:Updated:)\\s*" + "([-0-9aAmMpP/ :]+)$" + ; + + // Matches isolated versions as last resort + const char* regex5 = + "(?:(?:\\bv|\\br)(?:\\s?)(?:[-.:])?(?:\\s*))" + "((?:(?:\\balpha\\b)?|(?:\\bbeta\\b)?)\\s*[0-9]+([-._]*(?!esp|esm)[0-9a-zA-Z]+)*\\+?)" + ; + + // Matches isolated versions as last resort + const char* regex6 = + "((?:(?:\\balpha\\b)?|(?:\\bbeta\\b)?)\\s*\\b[0-9][-0-9a-zA-Z._]*\\+?)$" + ; + + const char* regex7 = + "(^\\bmark\\b\\s*\\b[IVX0-9][-0-9a-zA-Z._+]*\\s*(?:alpha|beta|test|debug)?\\s*(?:[0-9]*)?)$" + ; + + /// Array used to try each of the expressions defined above using + /// an iteration for each of them. + const std::vector version_checks({ + regex(regex1, regex::ECMAScript | regex::icase), + regex(regex2, regex::ECMAScript | regex::icase), + regex(regex3, regex::ECMAScript | regex::icase), + regex(regex4, regex::ECMAScript | regex::icase), + regex(regex5, regex::ECMAScript | regex::icase), //This incorrectly identifies "OBSE v19" where 19 is any integer. + //regex(regex6, regex::ECMAScript | regex::icase), //This is responsible for metallicow's false positive. + regex(regex7, regex::ECMAScript | regex::icase) + }); + Plugin::Plugin() : PluginMetadata(), _isEmpty(true), isMaster(false), crc(0), numOverrideRecords(0) {} Plugin::Plugin(const std::string& n) : PluginMetadata(n), _isEmpty(true), isMaster(false), crc(0), numOverrideRecords(0) {}