diff --git a/test/rules/src/https_everywhere_checker/check_rules.py b/test/rules/src/https_everywhere_checker/check_rules.py index 88ebb707089b..c3ee06a96130 100644 --- a/test/rules/src/https_everywhere_checker/check_rules.py +++ b/test/rules/src/https_everywhere_checker/check_rules.py @@ -237,7 +237,7 @@ def disableRuleset(ruleset, problemRules, urlCount): disableMessage = "The following targets have been disabled at {}:\n".format(timestamp) host = urllib.parse.urlparse(rule) logging.info("Disabling target {}".format(host.netloc)) - contents = re.sub('<[ \n]*target[ \n]+host[ \n]*=[ \n]*"{}"[ \n]*\/?[ \n]*>'.format(host.netloc), + contents = re.sub('<[ \n]*target[ \n]+host[ \n]*=[ \n]*"{}"[ \n]*/?[ \n]*>'.format(host.netloc), ''.format(host.netloc), contents); # Since the problems are going to be inserted into an XML comment, they cannot @@ -266,7 +266,8 @@ def disableRuleset(ruleset, problemRules, urlCount): def skipFile(filename): hasher = hashlib.new('sha256') - hasher.update(open(filename, 'rb').read()) + with open(filename, 'rb') as f: + hasher.update(f.read()) if hasher.digest() in skipdict: return True else: @@ -388,7 +389,8 @@ def cli(): "Skipping rule file '{}', matches skiplist.".format(xmlFname)) continue - ruleset = Ruleset(etree.parse(open(xmlFname, "rb")).getroot(), xmlFname) + with open(xmlFname, "rb") as f: + ruleset = Ruleset(etree.parse(f).getroot(), xmlFname) if ruleset.defaultOff and not includeDefaultOff: logging.debug("Skipping rule '{}', reason: {}".format( ruleset.name, ruleset.defaultOff)) diff --git a/test/rules/src/https_everywhere_checker/rules.py b/test/rules/src/https_everywhere_checker/rules.py index 2897a31c0e53..431819677216 100644 --- a/test/rules/src/https_everywhere_checker/rules.py +++ b/test/rules/src/https_everywhere_checker/rules.py @@ -324,7 +324,7 @@ def getCoverageProblems(self): # According to the logic in rules.js available at # EFForg/https-everywhere/blob/07fe9bd51456cc963c2d99e327f3183e032374ee/chromium/rules.js#L404 # - pattern = target.replace('.', '\.') # .replace('*', '.+') + pattern = target.replace('.', r'\.') # .replace('*', '.+') # `*.example.com` matches `bar.example.com` and `foo.bar.example.com` etc. if pattern[0] == '*': @@ -332,10 +332,10 @@ def getCoverageProblems(self): # however, `example.*` match `example.com` but not `example.co.uk` if pattern[-1] == '*': - pattern = pattern.replace('*', '[^\.]+') + pattern = pattern.replace('*', '[^.]+') # `www.*.example.com` match `www.image.example.com` but not `www.ssl.image.example.com` - pattern = pattern.replace('*', '[^\.]+') + pattern = pattern.replace('*', '[^.]+') pattern = '^' + pattern + '$' @@ -356,15 +356,15 @@ def getCoverageProblems(self): # Don't treat the question mark in non-capturing and lookahead groups as increasing the # number of required tests. needed_count = needed_count - \ - len(regex.findall("\(\?:", rule.fromPattern)) + len(regex.findall(r"\(\?:", rule.fromPattern)) needed_count = needed_count - \ - len(regex.findall("\(\?!", rule.fromPattern)) + len(regex.findall(r"\(\?!", rule.fromPattern)) needed_count = needed_count - \ - len(regex.findall("\(\?=", rule.fromPattern)) + len(regex.findall(r"\(\?=", rule.fromPattern)) # Don't treat escaped questions marks as increasing the number of required # tests. needed_count = needed_count - \ - len(regex.findall("\\?", rule.fromPattern)) + len(regex.findall(r"\?", rule.fromPattern)) actual_count = len(rule.tests) if actual_count < needed_count: problems.append("{}: Not enough tests ({} vs {}) for {}".format( @@ -374,9 +374,9 @@ def getCoverageProblems(self): needed_count = 1 + \ len(regex.findall("[+*?|]", exclusion.exclusionPattern)) needed_count = needed_count - \ - len(regex.findall("\(\?:", exclusion.exclusionPattern)) + len(regex.findall(r"\(\?:", exclusion.exclusionPattern)) needed_count = needed_count - \ - len(regex.findall("\\?", rule.fromPattern)) + len(regex.findall(r"\?", rule.fromPattern)) actual_count = len(exclusion.tests) if actual_count < needed_count: problems.append("{}: Not enough tests ({} vs {}) for {}".format(