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/libsass-3.6.4/contrib/plugin.cpp Examining data/libsass-3.6.4/include/sass.h Examining data/libsass-3.6.4/include/sass/base.h Examining data/libsass-3.6.4/include/sass/context.h Examining data/libsass-3.6.4/include/sass/functions.h Examining data/libsass-3.6.4/include/sass/values.h Examining data/libsass-3.6.4/include/sass/version.h Examining data/libsass-3.6.4/include/sass2scss.h Examining data/libsass-3.6.4/src/MurmurHash2.hpp Examining data/libsass-3.6.4/src/ast.cpp Examining data/libsass-3.6.4/src/ast.hpp Examining data/libsass-3.6.4/src/ast2c.cpp Examining data/libsass-3.6.4/src/ast2c.hpp Examining data/libsass-3.6.4/src/ast_def_macros.hpp Examining data/libsass-3.6.4/src/ast_fwd_decl.cpp Examining data/libsass-3.6.4/src/ast_fwd_decl.hpp Examining data/libsass-3.6.4/src/ast_helpers.hpp Examining data/libsass-3.6.4/src/ast_sel_cmp.cpp Examining data/libsass-3.6.4/src/ast_sel_super.cpp Examining data/libsass-3.6.4/src/ast_sel_unify.cpp Examining data/libsass-3.6.4/src/ast_sel_weave.cpp Examining data/libsass-3.6.4/src/ast_selectors.cpp Examining data/libsass-3.6.4/src/ast_selectors.hpp Examining data/libsass-3.6.4/src/ast_supports.cpp Examining data/libsass-3.6.4/src/ast_supports.hpp Examining data/libsass-3.6.4/src/ast_values.cpp Examining data/libsass-3.6.4/src/ast_values.hpp Examining data/libsass-3.6.4/src/b64/cencode.h Examining data/libsass-3.6.4/src/b64/encode.h Examining data/libsass-3.6.4/src/backtrace.cpp Examining data/libsass-3.6.4/src/backtrace.hpp Examining data/libsass-3.6.4/src/base64vlq.cpp Examining data/libsass-3.6.4/src/base64vlq.hpp Examining data/libsass-3.6.4/src/bind.cpp Examining data/libsass-3.6.4/src/bind.hpp Examining data/libsass-3.6.4/src/c2ast.cpp Examining data/libsass-3.6.4/src/c2ast.hpp Examining data/libsass-3.6.4/src/c99func.c Examining data/libsass-3.6.4/src/cencode.c Examining data/libsass-3.6.4/src/check_nesting.cpp Examining data/libsass-3.6.4/src/check_nesting.hpp Examining data/libsass-3.6.4/src/color_maps.cpp Examining data/libsass-3.6.4/src/color_maps.hpp Examining data/libsass-3.6.4/src/constants.cpp Examining data/libsass-3.6.4/src/constants.hpp Examining data/libsass-3.6.4/src/context.cpp Examining data/libsass-3.6.4/src/context.hpp Examining data/libsass-3.6.4/src/cssize.cpp Examining data/libsass-3.6.4/src/cssize.hpp Examining data/libsass-3.6.4/src/dart_helpers.hpp Examining data/libsass-3.6.4/src/debug.hpp Examining data/libsass-3.6.4/src/debugger.hpp Examining data/libsass-3.6.4/src/emitter.cpp Examining data/libsass-3.6.4/src/emitter.hpp Examining data/libsass-3.6.4/src/environment.cpp Examining data/libsass-3.6.4/src/environment.hpp Examining data/libsass-3.6.4/src/error_handling.cpp Examining data/libsass-3.6.4/src/error_handling.hpp Examining data/libsass-3.6.4/src/eval.cpp Examining data/libsass-3.6.4/src/eval.hpp Examining data/libsass-3.6.4/src/eval_selectors.cpp Examining data/libsass-3.6.4/src/expand.cpp Examining data/libsass-3.6.4/src/expand.hpp Examining data/libsass-3.6.4/src/extender.cpp Examining data/libsass-3.6.4/src/extender.hpp Examining data/libsass-3.6.4/src/extension.cpp Examining data/libsass-3.6.4/src/extension.hpp Examining data/libsass-3.6.4/src/file.cpp Examining data/libsass-3.6.4/src/file.hpp Examining data/libsass-3.6.4/src/fn_colors.cpp Examining data/libsass-3.6.4/src/fn_colors.hpp Examining data/libsass-3.6.4/src/fn_lists.cpp Examining data/libsass-3.6.4/src/fn_lists.hpp Examining data/libsass-3.6.4/src/fn_maps.cpp Examining data/libsass-3.6.4/src/fn_maps.hpp Examining data/libsass-3.6.4/src/fn_miscs.cpp Examining data/libsass-3.6.4/src/fn_miscs.hpp Examining data/libsass-3.6.4/src/fn_numbers.cpp Examining data/libsass-3.6.4/src/fn_numbers.hpp Examining data/libsass-3.6.4/src/fn_selectors.cpp Examining data/libsass-3.6.4/src/fn_selectors.hpp Examining data/libsass-3.6.4/src/fn_strings.cpp Examining data/libsass-3.6.4/src/fn_strings.hpp Examining data/libsass-3.6.4/src/fn_utils.cpp Examining data/libsass-3.6.4/src/fn_utils.hpp Examining data/libsass-3.6.4/src/inspect.cpp Examining data/libsass-3.6.4/src/inspect.hpp Examining data/libsass-3.6.4/src/json.cpp Examining data/libsass-3.6.4/src/json.hpp Examining data/libsass-3.6.4/src/kwd_arg_macros.hpp Examining data/libsass-3.6.4/src/lexer.cpp Examining data/libsass-3.6.4/src/lexer.hpp Examining data/libsass-3.6.4/src/listize.cpp Examining data/libsass-3.6.4/src/listize.hpp Examining data/libsass-3.6.4/src/mapping.hpp Examining data/libsass-3.6.4/src/memory.hpp Examining data/libsass-3.6.4/src/memory/allocator.cpp Examining data/libsass-3.6.4/src/memory/allocator.hpp Examining data/libsass-3.6.4/src/memory/config.hpp Examining data/libsass-3.6.4/src/memory/memory_pool.hpp Examining data/libsass-3.6.4/src/memory/shared_ptr.cpp Examining data/libsass-3.6.4/src/memory/shared_ptr.hpp Examining data/libsass-3.6.4/src/operation.hpp Examining data/libsass-3.6.4/src/operators.cpp Examining data/libsass-3.6.4/src/operators.hpp Examining data/libsass-3.6.4/src/ordered_map.hpp Examining data/libsass-3.6.4/src/output.cpp Examining data/libsass-3.6.4/src/output.hpp Examining data/libsass-3.6.4/src/parser.cpp Examining data/libsass-3.6.4/src/parser.hpp Examining data/libsass-3.6.4/src/parser_selectors.cpp Examining data/libsass-3.6.4/src/permutate.hpp Examining data/libsass-3.6.4/src/plugins.cpp Examining data/libsass-3.6.4/src/plugins.hpp Examining data/libsass-3.6.4/src/position.cpp Examining data/libsass-3.6.4/src/position.hpp Examining data/libsass-3.6.4/src/prelexer.cpp Examining data/libsass-3.6.4/src/prelexer.hpp Examining data/libsass-3.6.4/src/remove_placeholders.cpp Examining data/libsass-3.6.4/src/remove_placeholders.hpp Examining data/libsass-3.6.4/src/sass.cpp Examining data/libsass-3.6.4/src/sass.hpp Examining data/libsass-3.6.4/src/sass2scss.cpp Examining data/libsass-3.6.4/src/sass_context.cpp Examining data/libsass-3.6.4/src/sass_context.hpp Examining data/libsass-3.6.4/src/sass_functions.cpp Examining data/libsass-3.6.4/src/sass_functions.hpp Examining data/libsass-3.6.4/src/sass_values.cpp Examining data/libsass-3.6.4/src/sass_values.hpp Examining data/libsass-3.6.4/src/settings.hpp Examining data/libsass-3.6.4/src/source.cpp Examining data/libsass-3.6.4/src/source.hpp Examining data/libsass-3.6.4/src/source_data.hpp Examining data/libsass-3.6.4/src/source_map.cpp Examining data/libsass-3.6.4/src/source_map.hpp Examining data/libsass-3.6.4/src/stylesheet.cpp Examining data/libsass-3.6.4/src/stylesheet.hpp Examining data/libsass-3.6.4/src/to_value.cpp Examining data/libsass-3.6.4/src/to_value.hpp Examining data/libsass-3.6.4/src/units.cpp Examining data/libsass-3.6.4/src/units.hpp Examining data/libsass-3.6.4/src/utf8.h Examining data/libsass-3.6.4/src/utf8/checked.h Examining data/libsass-3.6.4/src/utf8/core.h Examining data/libsass-3.6.4/src/utf8/unchecked.h Examining data/libsass-3.6.4/src/utf8_string.cpp Examining data/libsass-3.6.4/src/utf8_string.hpp Examining data/libsass-3.6.4/src/util.cpp Examining data/libsass-3.6.4/src/util.hpp Examining data/libsass-3.6.4/src/util_string.cpp Examining data/libsass-3.6.4/src/util_string.hpp Examining data/libsass-3.6.4/src/values.cpp Examining data/libsass-3.6.4/src/values.hpp Examining data/libsass-3.6.4/test/test_shared_ptr.cpp Examining data/libsass-3.6.4/test/test_util_string.cpp FINAL RESULTS: data/libsass-3.6.4/src/c2ast.cpp:14:16: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). using std::strcpy; data/libsass-3.6.4/src/c99func.c:42:5: [4] (format) snprintf: If format strings can be influenced by an attacker, they can be exploited, and note that sprintf variations do not always \0-terminate (CWE-134). Use a constant for the format specification. int snprintf(char* str, size_t size, const char* format, ...) data/libsass-3.6.4/src/json.cpp:43:8: [4] (format) snprintf: If format strings can be influenced by an attacker, they can be exploited, and note that sprintf variations do not always \0-terminate (CWE-134). Use a constant for the format specification. #ifdef snprintf data/libsass-3.6.4/src/json.cpp:44:8: [4] (format) snprintf: If format strings can be influenced by an attacker, they can be exploited, and note that sprintf variations do not always \0-terminate (CWE-134). Use a constant for the format specification. #undef snprintf data/libsass-3.6.4/src/json.cpp:46:16: [4] (format) snprintf: If format strings can be influenced by an attacker, they can be exploited, and note that sprintf variations do not always \0-terminate (CWE-134). Use a constant for the format specification. extern "C" int snprintf(char *, size_t, const char *, ...); data/libsass-3.6.4/src/json.cpp:60:3: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). strcpy(ret, str); data/libsass-3.6.4/src/json.cpp:1372:9: [4] (format) snprintf: If format strings can be influenced by an attacker, they can be exploited, and note that sprintf variations do not always \0-terminate (CWE-134). Use a constant for the format specification. snprintf(errmsg, 256, __VA_ARGS__); \ data/libsass-3.6.4/src/sass2scss.cpp:871:3: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). strcpy (cstr, scss.c_str()); data/libsass-3.6.4/src/context.cpp:800:40: [3] (random) random: This function is not sufficiently random for security-related functions such as key and nonce creation (CWE-327). Use a more secure technique for acquiring random values. register_function(ctx, random_sig, random, env); data/libsass-3.6.4/src/fn_numbers.cpp:148:14: [3] (random) random: This function is not sufficiently random for security-related functions such as key and nonce creation (CWE-327). Use a more secure technique for acquiring random values. BUILT_IN(random) data/libsass-3.6.4/src/fn_numbers.hpp:35:14: [3] (random) random: This function is not sufficiently random for security-related functions such as key and nonce creation (CWE-327). Use a more secure technique for acquiring random values. BUILT_IN(random); data/libsass-3.6.4/src/parser.cpp:536:87: [3] (misc) chroot: chroot can be very helpful, but is hard to use correctly (CWE-250, CWE-22). Make sure the program immediately chdir("/"), closes file descriptors, and drops root privileges, and that all necessary files (and no more!) are in the new root. Selector_Schema_Obj Parser::parse_selector_schema(const char* end_of_selector, bool chroot) data/libsass-3.6.4/src/parser.hpp:253:44: [3] (misc) chroot: chroot can be very helpful, but is hard to use correctly (CWE-250, CWE-22). Make sure the program immediately chdir("/"), closes file descriptors, and drops root privileges, and that all necessary files (and no more!) are in the new root. SelectorListObj parseSelectorList(bool chroot); data/libsass-3.6.4/src/parser.hpp:254:50: [3] (misc) chroot: chroot can be very helpful, but is hard to use correctly (CWE-250, CWE-22). Make sure the program immediately chdir("/"), closes file descriptors, and drops root privileges, and that all necessary files (and no more!) are in the new root. ComplexSelectorObj parseComplexSelector(bool chroot); data/libsass-3.6.4/src/parser.hpp:255:81: [3] (misc) chroot: chroot can be very helpful, but is hard to use correctly (CWE-250, CWE-22). Make sure the program immediately chdir("/"), closes file descriptors, and drops root privileges, and that all necessary files (and no more!) are in the new root. Selector_Schema_Obj parse_selector_schema(const char* end_of_selector, bool chroot); data/libsass-3.6.4/src/parser_selectors.cpp:12:56: [3] (misc) chroot: chroot can be very helpful, but is hard to use correctly (CWE-250, CWE-22). Make sure the program immediately chdir("/"), closes file descriptors, and drops root privileges, and that all necessary files (and no more!) are in the new root. ComplexSelectorObj Parser::parseComplexSelector(bool chroot) data/libsass-3.6.4/src/parser_selectors.cpp:53:48: [3] (misc) chroot: chroot can be very helpful, but is hard to use correctly (CWE-250, CWE-22). Make sure the program immediately chdir("/"), closes file descriptors, and drops root privileges, and that all necessary files (and no more!) are in the new root. sel->chroots(sel->has_real_parent_ref() || chroot); data/libsass-3.6.4/src/parser_selectors.cpp:61:50: [3] (misc) chroot: chroot can be very helpful, but is hard to use correctly (CWE-250, CWE-22). Make sure the program immediately chdir("/"), closes file descriptors, and drops root privileges, and that all necessary files (and no more!) are in the new root. SelectorListObj Parser::parseSelectorList(bool chroot) data/libsass-3.6.4/src/parser_selectors.cpp:82:57: [3] (misc) chroot: chroot can be very helpful, but is hard to use correctly (CWE-250, CWE-22). Make sure the program immediately chdir("/"), closes file descriptors, and drops root privileges, and that all necessary files (and no more!) are in the new root. ComplexSelectorObj complex = parseComplexSelector(chroot); data/libsass-3.6.4/src/sass2scss.cpp:826:10: [3] (random) setstate: This function is not sufficiently random for security-related functions such as key and nonce creation (CWE-327). Use a more secure technique for acquiring random values. is.setstate(std::ios::eofbit); data/libsass-3.6.4/src/file.cpp:61:9: [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. char wd[wd_len]; data/libsass-3.6.4/src/file.cpp:68:9: [2] (buffer) wchar_t: 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. wchar_t wd[wd_len]; data/libsass-3.6.4/src/file.cpp:83:9: [2] (buffer) wchar_t: 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. wchar_t resolved[32768]; data/libsass-3.6.4/src/file.cpp:448:9: [2] (buffer) wchar_t: 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. wchar_t resolved[32768]; data/libsass-3.6.4/src/file.cpp:480:25: [2] (misc) fopen: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). FILE* fd = std::fopen(path.c_str(), "rb"); data/libsass-3.6.4/src/json.cpp:107: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(sb->cur, bytes, count); data/libsass-3.6.4/src/json.cpp:837:3: [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. char throwaway_buffer[4]; data/libsass-3.6.4/src/json.cpp:1227:13: [2] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). Risk is low because the source is a constant string. strcpy(b, "\\uFFFD"); data/libsass-3.6.4/src/json.cpp:1288:3: [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. char buf[64]; data/libsass-3.6.4/src/json.cpp:1289:3: [2] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. Risk is low because the source has a constant maximum length. sprintf(buf, "%.16g", num); data/libsass-3.6.4/src/json.cpp:1368:39: [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. bool json_check(const JsonNode *node, char errmsg[256]) data/libsass-3.6.4/src/json.hpp:115:39: [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. bool json_check(const JsonNode *node, char errmsg[256]); data/libsass-3.6.4/src/parser.hpp:348:34: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). template <Prelexer::prelexer open, Prelexer::prelexer close> data/libsass-3.6.4/src/parser.hpp:351:17: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). if (lex < open >(false)) { data/libsass-3.6.4/src/sass.cpp:52:10: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. std::memcpy(cpy, str, len); data/libsass-3.6.4/src/sass2scss.cpp:732:38: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). if (IS_CSS_COMMENT(converter) && open != "") data/libsass-3.6.4/src/sass2scss.cpp:744:25: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). converter.comment = open; data/libsass-3.6.4/src/util.cpp:312:20: [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. unsigned char u[5] = {0,0,0,0,0}; utf8::append(cp, u); data/libsass-3.6.4/src/util.cpp:401:20: [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. unsigned char u[5] = {0,0,0,0,0}; utf8::append(cp, u); data/libsass-3.6.4/src/b64/encode.h:58:16: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). istream_in.read(plaintext, N); data/libsass-3.6.4/src/c2ast.cpp:13:16: [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). using std::strlen; data/libsass-3.6.4/src/json.cpp:57:30: [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). char *ret = (char*) malloc(strlen(str) + 1); data/libsass-3.6.4/src/json.cpp:119:24: [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). sb_put(sb, str, (int)strlen(str)); data/libsass-3.6.4/src/json.cpp:125:34: [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). assert(sb->start <= sb->cur && strlen(sb->start) == (size_t)(sb->cur - sb->start)); data/libsass-3.6.4/src/position.cpp:19:34: [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). *this = inc(string, string + strlen(string)); data/libsass-3.6.4/src/position.cpp:36:14: [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). end += strlen(beg); data/libsass-3.6.4/src/position.hpp:84:42: [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). : prefix(str), begin(str), end(str + strlen(str)) { } data/libsass-3.6.4/src/sass.cpp:50:18: [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). size_t len = strlen(str) + 1; data/libsass-3.6.4/src/source.cpp:24:14: [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). length = strlen(data); data/libsass-3.6.4/src/util.cpp:448:28: [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). const char* end = it + strlen(it) + 1; data/libsass-3.6.4/src/util.hpp:71:42: [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 starts_with(str, prefix, std::strlen(prefix)); data/libsass-3.6.4/src/util.hpp:77:48: [1] (buffer) equal: Function does not check the second iterator for over-read conditions (CWE-126). This function is often discouraged by most C++ coding standards in favor of its safer alternatives provided since C++14. Consider using a form of this function that checks the second iterator before potentially overflowing it. return suffix.size() <= str.size() && std::equal(suffix.rbegin(), suffix.rend(), str.rbegin()); data/libsass-3.6.4/src/util.hpp:89:40: [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 ends_with(str, suffix, std::strlen(suffix)); ANALYSIS SUMMARY: Hits = 53 Lines analyzed = 41797 in approximately 0.98 seconds (42696 lines/second) Physical Source Lines of Code (SLOC) = 30863 Hits@level = [0] 2 [1] 14 [2] 19 [3] 12 [4] 8 [5] 0 Hits@level+ = [0+] 55 [1+] 53 [2+] 39 [3+] 20 [4+] 8 [5+] 0 Hits/KSLOC@level+ = [0+] 1.78207 [1+] 1.71727 [2+] 1.26365 [3+] 0.648025 [4+] 0.25921 [5+] 0 Dot directories skipped = 2 (--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.