def rstfiles_to_rules_xml(directory, fix_urls): rules = et.Element('rules') for subdir, _, files in os.walk(directory): for f in files: ext = os.path.splitext(f)[-1].lower() if ext == ".rst" and f != "list.rst": rst_file_path = os.path.join(subdir, f) rules.append(rstfile_to_rule(rst_file_path, fix_urls)) write_rules_xml(rules, sys.stdout)
def rstfiles_to_rules_xml(directory, fix_urls): rules = et.Element('rules') for subdir, _, files in os.walk(directory): for f in files: ext = os.path.splitext(f)[-1].lower() if ext == ".rst" and f != "list.rst": rst_file_path = os.path.join(subdir, f) rules.append(rstfile_to_rule(rst_file_path, fix_urls)) write_rules_xml(rules, sys.stdout)
def create_xml(warnings): """ Write rules in XML format to stdout. """ rules = et.Element('rules') add_template_rules(rules) create_rules(warnings, rules) write_rules_xml(rules, sys.stdout)
def diagnostics_to_rules_xml(json_file): rules = et.Element('rules') # add a template rule create_template_rules(rules) # add clang default warnings create_clang_default_rules(rules) with open(json_file) as f: data = json.load(f) diag_groups = data["!instanceof"]["DiagGroup"] for diag_group_id in sorted(diag_groups): if not data[diag_group_id]["GroupName"]: continue # colleact all Diagnostics included into this DiagGroup warnings_in_group = [] collect_warnings(data, diag_group_id, warnings_in_group) if not warnings_in_group: continue # for each DiagGroup calculate the rule type and severity rule_type, rule_severity = calculate_rule_type_and_severity( warnings_in_group) group_name_escaped = data[diag_group_id]["GroupName"].replace( "++", "-").replace("#", "-").replace("--", "-") rule_name = "clang-diagnostic-" + data[diag_group_id]["GroupName"] rule_key = "clang-diagnostic-" + data[diag_group_id]["GroupName"] rule_description = generate_description(group_name_escaped, warnings_in_group) rule = et.Element('rule') et.SubElement(rule, 'key').text = rule_key et.SubElement(rule, 'name').text = rule_name et.SubElement(rule, 'description').append(CDATA(rule_description)) et.SubElement(rule, 'severity').text = rule_severity et.SubElement(rule, 'type').text = rule_type if rule_severity != 'INFO': et.SubElement(rule, 'remediationFunction').text = 'LINEAR' et.SubElement(rule, 'remediationFunctionGapMultiplier').text = '5min' rules.append(rule) write_rules_xml(rules, sys.stdout)
def diagnostics_to_rules_xml(json_file): rules = et.Element('rules') with open(json_file) as f: data = json.load(f) diag_groups = data["!instanceof"]["DiagGroup"] for diag_group_id in sorted(diag_groups): if not data[diag_group_id]["GroupName"]: continue # colleact all Diagnostics included into this DiagGroup warnings_in_group = [] collect_warnings(data, diag_group_id, warnings_in_group) if not warnings_in_group: continue # for each DiagGroup calculate the rule type and severity rule_type, rule_severity = calculate_rule_type_and_severity( warnings_in_group) group_name_escaped = data[diag_group_id]["GroupName"].replace( "++", "-").replace("#", "-").replace("--", "-") rule_name = "clang-diagnostic-" + data[diag_group_id]["GroupName"] rule_key = "clang-diagnostic-" + data[diag_group_id]["GroupName"] rule_description = generate_description( group_name_escaped, warnings_in_group) rule = et.Element('rule') et.SubElement(rule, 'key').text = rule_key et.SubElement(rule, 'name').text = rule_name et.SubElement(rule, 'description').append(CDATA(rule_description)) et.SubElement(rule, 'severity').text = rule_severity et.SubElement(rule, 'type').text = rule_type rules.append(rule) write_rules_xml(rules, sys.stdout)
def print_usage_and_exit(): script_name = os.path.basename(sys.argv[0]) print """Usage: %s rules <cwec_vN.N.xml> < cppcheck --errorlist --xml-version=2 --library=<lib0.cfg> --library=<lib1.cfg> see generate_cppcheck_resources.sh for more details""" % (script_name) sys.exit(1) def parse_cppcheck_errorlist(f): tree = et.parse(f) cppcheck_root = tree.getroot() cppcheck_errors = [] for errors_tag in cppcheck_root.iter('errors'): for error_tag in errors_tag.iter('error'): cppcheck_errors.append(error_tag) return cppcheck_errors if __name__ == "__main__": if len(sys.argv) < 3: print_usage_and_exit() # transform to an other elementtree if sys.argv[1] == "rules": errors = parse_cppcheck_errorlist(sys.stdin) CWE_MAP = load_cwe(sys.argv[2]) root = create_cppcheck_rules(errors) write_rules_xml(root, sys.stdout) else: print_usage_and_exit()
def print_usage_and_exit(): script_name = os.path.basename(sys.argv[0]) print """Usage: %s rules <cwec_vN.N.xml> < cppcheck --errorlist --xml-version=2 --library=<lib0.cfg> --library=<lib1.cfg> see generate_cppcheck_resources.sh for more details""" % (script_name) sys.exit(1) def parse_cppcheck_errorlist(f): tree = et.parse(f) cppcheck_root = tree.getroot() cppcheck_errors = [] for errors_tag in cppcheck_root.iter('errors'): for error_tag in errors_tag.iter('error'): cppcheck_errors.append(error_tag) return cppcheck_errors if __name__ == "__main__": if len(sys.argv) < 3: print_usage_and_exit() # transform to an other elementtree if sys.argv[1] == "rules": errors = parse_cppcheck_errorlist(sys.stdin) CWE_MAP = load_cwe(sys.argv[2]) root = create_cppcheck_rules(errors) write_rules_xml(root, sys.stdout) else: print_usage_and_exit()