diff --git a/addons/cppcheckdata.py b/addons/cppcheckdata.py index aea45b8bc..66663fd75 100644 --- a/addons/cppcheckdata.py +++ b/addons/cppcheckdata.py @@ -499,9 +499,7 @@ class Configuration: for values in element: self.valueflow.append(ValueFlow(values)) - IdMap = {} - IdMap[None] = None - IdMap['0'] = None + IdMap = {None: None, '0': None} for token in self.tokenlist: IdMap[token.Id] = token for scope in self.scopes: @@ -689,7 +687,7 @@ def ArgumentParser(): return parser -def reportError(template, callstack=[], severity='', message='', id=''): +def reportError(template, callstack=(), severity='', message='', id=''): """ Format an error message according to the template. diff --git a/addons/misra.py b/addons/misra.py index 563808ced..c3ea97600 100644 --- a/addons/misra.py +++ b/addons/misra.py @@ -26,7 +26,6 @@ def reportError(location, num1, num2): if VERIFY: VERIFY_ACTUAL.append(str(location.linenr) + ':' + str(num1) + '.' + str(num2)) else: - errmsg = None num = num1 * 100 + num2 if num in ruleTexts: errmsg = ruleTexts[num] + ' [misra-c2012-' + str(num1) + '.' + str(num2) + ']' @@ -43,14 +42,6 @@ def simpleMatch(token, pattern): token = token.next return True -# Platform -CHAR_BIT = 0 -SHORT_BIT = 0 -INT_BIT = 0 -LONG_BIT = 0 -LONG_LONG_BIT = 0 -POINTER_BIT = 0 - KEYWORDS = { 'auto', 'break', @@ -579,11 +570,11 @@ def misra_12_1(data): if p < 2 or p > 12: continue p1 = getPrecedence(token.astOperand1) - if p1 <= 12 and p1 > p and noParentheses(token.astOperand1, token): + if p < p1 <= 12 and noParentheses(token.astOperand1, token): reportError(token, 12, 1) continue p2 = getPrecedence(token.astOperand2) - if p2 <= 12 and p2 > p and noParentheses(token, token.astOperand2): + if p < p2 <= 12 and noParentheses(token, token.astOperand2): reportError(token, 12, 1) continue @@ -617,7 +608,6 @@ def misra_12_3(data): def misra_12_4(data): - max_uint = 0 if INT_BIT == 16: max_uint = 0xffff elif INT_BIT == 32: diff --git a/addons/y2038/y2038.py b/addons/y2038/y2038.py index 919039718..22e96f13a 100644 --- a/addons/y2038/y2038.py +++ b/addons/y2038/y2038.py @@ -262,13 +262,13 @@ for dumpfile in dumpfiles: elif re_undef_use_time_bits64.match(directive.str): unsafe = int(srclinenr) # do we have a safe..unsafe area? - if safe > 0 and unsafe > safe: + if unsafe > safe > 0: safe_ranges.append((safe, unsafe)) safe = -1 # check end of source beyond last directive if len(cfg.tokenlist) > 0: unsafe = int(cfg.tokenlist[-1].linenr) - if safe > 0 and unsafe > safe: + if unsafe > safe > 0: safe_ranges.append((safe, unsafe)) # go through all tokens for token in cfg.tokenlist: diff --git a/tools/daca2-addons.py b/tools/daca2-addons.py index 0f86571ae..c1fec6025 100644 --- a/tools/daca2-addons.py +++ b/tools/daca2-addons.py @@ -68,8 +68,6 @@ def handleRemoveReadonly(func, path, exc): # Is the error an access error ? os.chmod(path, stat.S_IWUSR) func(path) - else: - raise def removeAllExceptResults(): @@ -78,10 +76,8 @@ def removeAllExceptResults(): count -= 1 filenames = [] - for g in glob.glob('[A-Za-z0-9]*'): - filenames.append(g) - for g in glob.glob('.[a-z]*'): - filenames.append(g) + filenames.extend(glob.glob('[A-Za-z0-9]*')) + filenames.extend(glob.glob('.[a-z]*')) try: for filename in filenames: @@ -187,7 +183,7 @@ def scanarchive(filepath, jobs): '.'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) - comm = p.communicate() + p.communicate() results = open('results.txt', 'at') diff --git a/tools/daca2-download.py b/tools/daca2-download.py index 1b1e68c29..4895ca085 100644 --- a/tools/daca2-download.py +++ b/tools/daca2-download.py @@ -67,8 +67,6 @@ def handleRemoveReadonly(func, path, exc): # Is the error an access error ? os.chmod(path, stat.S_IWUSR) func(path) - else: - raise def removeAll(): @@ -77,10 +75,8 @@ def removeAll(): count -= 1 filenames = [] - for g in glob.glob('[#_A-Za-z0-9]*'): - filenames.append(g) - for g in glob.glob('.[A-Za-z]*'): - filenames.append(g) + filenames.extend(glob.glob('[#_A-Za-z0-9]*')) + filenames.extend(glob.glob('.[A-Za-z]*')) try: for filename in filenames: diff --git a/tools/daca2-report.py b/tools/daca2-report.py index fec676d1b..ad406cfad 100644 --- a/tools/daca2-report.py +++ b/tools/daca2-report.py @@ -4,7 +4,6 @@ import sys def readdate(data): - datepos = -1 if data[:5] == 'DATE ': datepos = 0 else: @@ -21,7 +20,7 @@ def readdate(data): if datepos >= len(data): return None d = data[datepos] - if d >= '0' and d <= '9': + if '0' <= d <= '9': datestr += d elif d == '\n' or d == '\r': if len(datestr) == 8: diff --git a/tools/daca2.py b/tools/daca2.py index 506b74da2..a84120c22 100644 --- a/tools/daca2.py +++ b/tools/daca2.py @@ -70,8 +70,6 @@ def handleRemoveReadonly(func, path, exc): # Is the error an access error ? os.chmod(path, stat.S_IWUSR) func(path) - else: - raise def removeAllExceptResults(): diff --git a/tools/listErrorsWithoutCWE.py b/tools/listErrorsWithoutCWE.py index 329d50142..1a4c784c4 100755 --- a/tools/listErrorsWithoutCWE.py +++ b/tools/listErrorsWithoutCWE.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +from __future__ import print_function import argparse import xml.etree.ElementTree as ET @@ -12,9 +13,8 @@ def main(): tree = ET.parse(vars(parsed)["F"]) root = tree.getroot() for child in root.iter("error"): - if "cwe" not in child.attrib: - print child.attrib["id"], ",", child.attrib["severity"], ",", child.attrib["verbose"] + print(child.attrib["id"], child.attrib["severity"], child.attrib["verbose"], sep=", ") if __name__ == "__main__": main() diff --git a/tools/matchcompiler.py b/tools/matchcompiler.py index 6dd76e74e..9fe8ab0c5 100755 --- a/tools/matchcompiler.py +++ b/tools/matchcompiler.py @@ -36,8 +36,9 @@ class MatchCompiler: self._rawMatchFunctions = [] self._matchFunctionCache = {} + @staticmethod def _generateCacheSignature( - self, pattern, endToken=None, varId=None, isFindMatch=False): + pattern, endToken=None, varId=None, isFindMatch=False): sig = pattern if endToken: @@ -82,7 +83,8 @@ class MatchCompiler: self._matchFunctionCache[signature] = id - def _compileCmd(self, tok): + @staticmethod + def _compileCmd(tok): if tok == '%any%': return 'true' elif tok == '%assign%': @@ -122,9 +124,6 @@ class MatchCompiler: def _compilePattern(self, pattern, nr, varid, isFindMatch=False, tokenType="const Token"): - ret = '' - returnStatement = '' - if isFindMatch: ret = '\n ' + tokenType + ' * tok = start_tok;\n' returnStatement = 'continue;\n' @@ -193,9 +192,9 @@ class MatchCompiler: negatedTok = "!" + self._compileCmd(tok) # fold !true => false ; !false => true # this avoids cppcheck warnings about condition always being true/false - if (negatedTok == "!false"): + if negatedTok == "!false": negatedTok = "true" - elif (negatedTok == "!true"): + elif negatedTok == "!true": negatedTok = "false" ret += ' if (!tok || ' + negatedTok + ')\n' ret += ' ' + returnStatement @@ -229,7 +228,8 @@ class MatchCompiler: return ret - def parseMatch(self, line, pos1): + @staticmethod + def parseMatch(line, pos1): parlevel = 0 args = [] argstart = 0 @@ -250,10 +250,8 @@ class MatchCompiler: elif line[pos] == ')': parlevel -= 1 if parlevel == 0: - ret = [] - ret.append(line[pos1:pos + 1]) - for arg in args: - ret.append(arg) + ret = [line[pos1:pos + 1]] + ret.extend(args) ret.append(line[argstart:pos]) return ret elif line[pos] == ',' and parlevel == 1: @@ -263,7 +261,8 @@ class MatchCompiler: return None - def _isInString(self, line, pos1): + @staticmethod + def _isInString(line, pos1): pos = 0 inString = False while pos != pos1: @@ -274,9 +273,9 @@ class MatchCompiler: pos += 1 return inString - def _parseStringComparison(self, line, pos1): + @staticmethod + def _parseStringComparison(line, pos1): startPos = 0 - endPos = 0 pos = pos1 inString = False while pos < len(line): @@ -286,7 +285,7 @@ class MatchCompiler: elif line[pos] == '"': inString = False endPos = pos + 1 - return (startPos, endPos) + return startPos, endPos elif line[pos] == '"': startPos = pos inString = True @@ -294,8 +293,9 @@ class MatchCompiler: return None + @staticmethod def _compileVerifyTokenMatch( - self, is_simplematch, verifyNumber, pattern, patternNumber, varId): + is_simplematch, verifyNumber, pattern, patternNumber, varId): more_args = '' if varId: more_args = ', const unsigned int varid' @@ -421,8 +421,9 @@ class MatchCompiler: return line + @staticmethod def _compileVerifyTokenFindMatch( - self, is_findsimplematch, verifyNumber, pattern, patternNumber, endToken, varId): + is_findsimplematch, verifyNumber, pattern, patternNumber, endToken, varId): more_args = '' if endToken: more_args += ', const Token * endToken' @@ -514,7 +515,6 @@ class MatchCompiler: ) def _replaceTokenFindMatch(self, line, linenr, filename): - pos1 = 0 while True: is_findsimplematch = True pos1 = line.find('Token::findsimplematch(')