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)
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)
Example #6
0
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()