Flawfinder version 2.0.10, (C) 2001-2019 David A. Wheeler. Number of rules (primarily dangerous function names) in C/C++ ruleset: 223 Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_parser_options.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_writer.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_schema.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_parser_context.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_schema.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_xpath_object.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_encoding.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_document.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_schema_facet.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_error.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_io.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_schema_element.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_sax2_handler.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_encoding.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_namespace.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_cbg.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_html_parser.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_attributes.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_schema_attribute.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_dtd.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_node.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_document.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_reader.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_html_parser_options.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_parser.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_relaxng.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_dtd.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_namespaces.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_sax_parser.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_version.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_schema_attribute.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_xpath_context.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_html_parser_options.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_xinclude.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_libxml.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_sax_parser.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_schema_facet.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_schema_type.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_html_parser_context.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_namespace.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_parser.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_parser_context.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_sax2_handler.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_xpath_object.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_xpath_expression.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_attr_decl.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_reader.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_namespaces.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_xpath_expression.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_html_parser_context.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_schema_element.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_input_cbg.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_xpath.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_xpath_context.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_writer.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_attributes.c Examining data/ruby-libxml-3.2.0/ext/libxml/libxml.c Examining data/ruby-libxml-3.2.0/ext/libxml/extconf.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_xpointer.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_node.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_attr_decl.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_schema_type.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_io.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_parser_options.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_xpath.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_input_cbg.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_error.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_relaxng.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_html_parser.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_attr.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_attr.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_xpointer.h Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml.c Examining data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_xinclude.h FINAL RESULTS: data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_dtd.c:138:19: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. VALUE external, system, dtd_string; data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_dtd.c:158:50: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. rb_scan_args(argc, argv, "32", &external, &system, &name, &doc, &internal); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_dtd.c:164:11: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. if (system != Qnil) { data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_dtd.c:165:20: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. Check_Type(system, T_STRING); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_dtd.c:166:51: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. xsystem = (const xmlChar*) StringValuePtr(system); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_dtd.c:195:48: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. rb_scan_args(argc, argv, "20", &external, &system); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_dtd.c:198:16: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. Check_Type(system, T_STRING); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_dtd.c:201:35: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. (xmlChar*) StringValuePtr(system)); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml.c:780:30: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. str = rb_str_new2((const char *) list[i]); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_html_parser_context.c:94:5: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. memcpy(sax, &htmlDefaultSAXHandler, sizeof(xmlSAXHandlerV1)); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_html_parser_context.c:247:5: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. memcpy(ctxt->sax, &htmlDefaultSAXHandler, sizeof(xmlSAXHandlerV1)); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_io.c:25:3: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. memcpy(buffer, StringValuePtr(string), size); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_sax_parser.c:91:3: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. memcpy(ctxt->sax, &rxml_sax_handler, sizeof(rxml_sax_handler)); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_cbg.c:50:29: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). deb_doc->remaining = (int)strlen(deb_doc->buffer); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_cbg.c:69:3: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy(buffer, deb_doc->bpos, ret_len); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_encoding.c:188:58: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). return rb_external_str_new_with_enc((const char*)xstr, strlen((const char*)xstr), rbencoding); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_input_cbg.c:49:32: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). ic_doc->remaining = (int)strlen(ic_doc->buffer); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_input_cbg.c:72:3: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy(buffer, ic_doc->bpos, ret_len); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_input_cbg.c:113:27: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). scheme->name_len = (int)strlen(scheme->scheme_name); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_relaxng.c:94:74: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). xparser = xmlRelaxNGNewMemParserCtxt(StringValuePtr(relaxng_str), (int)strlen(StringValuePtr(relaxng_str))); data/ruby-libxml-3.2.0/ext/libxml/ruby_xml_schema.c:110:72: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). xparser = xmlSchemaNewMemParserCtxt(StringValuePtr(schema_str), (int)strlen(StringValuePtr(schema_str))); ANALYSIS SUMMARY: Hits = 21 Lines analyzed = 14283 in approximately 0.34 seconds (41624 lines/second) Physical Source Lines of Code (SLOC) = 8368 Hits@level = [0] 1 [1] 8 [2] 5 [3] 0 [4] 8 [5] 0 Hits@level+ = [0+] 22 [1+] 21 [2+] 13 [3+] 8 [4+] 8 [5+] 0 Hits/KSLOC@level+ = [0+] 2.62906 [1+] 2.50956 [2+] 1.55354 [3+] 0.956023 [4+] 0.956023 [5+] 0 Dot directories skipped = 1 (--followdotdir overrides) Minimum risk level = 1 Not every hit is necessarily a security vulnerability. There may be other security vulnerabilities; review your code! See 'Secure Programming HOWTO' (https://dwheeler.com/secure-programs) for more information.