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/r-cran-vctrs-0.3.5/src/equal.h Examining data/r-cran-vctrs-0.3.5/src/size-common.c Examining data/r-cran-vctrs-0.3.5/src/arg-counter.c Examining data/r-cran-vctrs-0.3.5/src/version.c Examining data/r-cran-vctrs-0.3.5/src/subscript.c Examining data/r-cran-vctrs-0.3.5/src/c.h Examining data/r-cran-vctrs-0.3.5/src/dictionary.c Examining data/r-cran-vctrs-0.3.5/src/strides.h Examining data/r-cran-vctrs-0.3.5/src/poly-op.h Examining data/r-cran-vctrs-0.3.5/src/slice.c Examining data/r-cran-vctrs-0.3.5/src/fields.c Examining data/r-cran-vctrs-0.3.5/src/cast.h Examining data/r-cran-vctrs-0.3.5/src/shape.h Examining data/r-cran-vctrs-0.3.5/src/order-truelength.c Examining data/r-cran-vctrs-0.3.5/src/growable.c Examining data/r-cran-vctrs-0.3.5/src/dim.c Examining data/r-cran-vctrs-0.3.5/src/slice-assign-array.c Examining data/r-cran-vctrs-0.3.5/src/ptype2-dispatch.c Examining data/r-cran-vctrs-0.3.5/src/hash.c Examining data/r-cran-vctrs-0.3.5/src/arg-counter.h Examining data/r-cran-vctrs-0.3.5/src/type-date-time.c Examining data/r-cran-vctrs-0.3.5/src/typeof2-s3.c Examining data/r-cran-vctrs-0.3.5/src/hash.h Examining data/r-cran-vctrs-0.3.5/src/cast-dispatch.c Examining data/r-cran-vctrs-0.3.5/src/slice-array.c Examining data/r-cran-vctrs-0.3.5/src/c.c Examining data/r-cran-vctrs-0.3.5/src/type-info.c Examining data/r-cran-vctrs-0.3.5/src/rep.c Examining data/r-cran-vctrs-0.3.5/src/callables.c Examining data/r-cran-vctrs-0.3.5/src/type2.c Examining data/r-cran-vctrs-0.3.5/src/init.c Examining data/r-cran-vctrs-0.3.5/src/type.c Examining data/r-cran-vctrs-0.3.5/src/slice-chop.c Examining data/r-cran-vctrs-0.3.5/src/slice-assign.c Examining data/r-cran-vctrs-0.3.5/src/utils.c Examining data/r-cran-vctrs-0.3.5/src/dim.h Examining data/r-cran-vctrs-0.3.5/src/order-groups.c Examining data/r-cran-vctrs-0.3.5/src/bind.c Examining data/r-cran-vctrs-0.3.5/src/type-data-frame.h Examining data/r-cran-vctrs-0.3.5/src/compare.c Examining data/r-cran-vctrs-0.3.5/src/unspecified.c Examining data/r-cran-vctrs-0.3.5/src/slice.h Examining data/r-cran-vctrs-0.3.5/src/cast.c Examining data/r-cran-vctrs-0.3.5/src/owned.h Examining data/r-cran-vctrs-0.3.5/src/utils.h Examining data/r-cran-vctrs-0.3.5/src/order-radix.h Examining data/r-cran-vctrs-0.3.5/src/slice-assign.h Examining data/r-cran-vctrs-0.3.5/src/order-sortedness.c Examining data/r-cran-vctrs-0.3.5/src/names.c Examining data/r-cran-vctrs-0.3.5/src/order-radix.c Examining data/r-cran-vctrs-0.3.5/src/group.c Examining data/r-cran-vctrs-0.3.5/src/conditions.c Examining data/r-cran-vctrs-0.3.5/src/names.h Examining data/r-cran-vctrs-0.3.5/src/size.c Examining data/r-cran-vctrs-0.3.5/src/order-groups.h Examining data/r-cran-vctrs-0.3.5/src/utils-dispatch.c Examining data/r-cran-vctrs-0.3.5/src/typeof2.c Examining data/r-cran-vctrs-0.3.5/src/c-unchop.c Examining data/r-cran-vctrs-0.3.5/src/ptype2.h Examining data/r-cran-vctrs-0.3.5/src/cast-bare.c Examining data/r-cran-vctrs-0.3.5/src/utils-rlang.h Examining data/r-cran-vctrs-0.3.5/src/utils-rlang.c Examining data/r-cran-vctrs-0.3.5/src/type-data-frame.c Examining data/r-cran-vctrs-0.3.5/src/vctrs.h Examining data/r-cran-vctrs-0.3.5/src/equal.c Examining data/r-cran-vctrs-0.3.5/src/type-tibble.h Examining data/r-cran-vctrs-0.3.5/src/arg.h Examining data/r-cran-vctrs-0.3.5/src/subscript.h Examining data/r-cran-vctrs-0.3.5/src/translate.h Examining data/r-cran-vctrs-0.3.5/src/poly-op.c Examining data/r-cran-vctrs-0.3.5/src/dictionary.h Examining data/r-cran-vctrs-0.3.5/src/runs.c Examining data/r-cran-vctrs-0.3.5/src/altrep-rle.c Examining data/r-cran-vctrs-0.3.5/src/type-factor.c Examining data/r-cran-vctrs-0.3.5/src/type-tibble.c Examining data/r-cran-vctrs-0.3.5/src/altrep-rle.h Examining data/r-cran-vctrs-0.3.5/src/lazy.h Examining data/r-cran-vctrs-0.3.5/src/subscript-loc.h Examining data/r-cran-vctrs-0.3.5/src/fill.c Examining data/r-cran-vctrs-0.3.5/src/order-sortedness.h Examining data/r-cran-vctrs-0.3.5/src/order-truelength.h Examining data/r-cran-vctrs-0.3.5/src/arg.c Examining data/r-cran-vctrs-0.3.5/src/type-factor.h Examining data/r-cran-vctrs-0.3.5/src/subscript-loc.c Examining data/r-cran-vctrs-0.3.5/src/altrep.h Examining data/r-cran-vctrs-0.3.5/src/complete.c Examining data/r-cran-vctrs-0.3.5/src/proxy.c Examining data/r-cran-vctrs-0.3.5/src/translate.c Examining data/r-cran-vctrs-0.3.5/src/shape.c Examining data/r-cran-vctrs-0.3.5/src/proxy-restore.c Examining data/r-cran-vctrs-0.3.5/src/split.c Examining data/r-cran-vctrs-0.3.5/src/ptype-common.h Examining data/r-cran-vctrs-0.3.5/inst/include/vctrs.c Examining data/r-cran-vctrs-0.3.5/inst/include/vctrs.h FINAL RESULTS: data/r-cran-vctrs-0.3.5/src/utils.c:1725:5: [4] (format) vsnprintf: 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. vsnprintf(BUF, FMT_BUFSIZE, FMT, dots); \ data/r-cran-vctrs-0.3.5/src/arg.c:102: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(buf, src, len); data/r-cran-vctrs-0.3.5/src/arg.c:196: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(buf, src, len); data/r-cran-vctrs-0.3.5/src/arg.c:206: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 tmp[1]; data/r-cran-vctrs-0.3.5/src/hash.c:136: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(RAW(out), &hash, sizeof(uint32_t)); data/r-cran-vctrs-0.3.5/src/names.c:292:5: [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[buf_size]; data/r-cran-vctrs-0.3.5/src/names.c:295: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(buf, name, size); data/r-cran-vctrs-0.3.5/src/names.c:455: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[MAX_IOTA_SIZE]; data/r-cran-vctrs-0.3.5/src/names.c:610:1: [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 vctrs_paste_buffer[VCTRS_PASTE_BUFFER_MAX_SIZE]; data/r-cran-vctrs-0.3.5/src/names.c:637: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(bufp, prefix, outer_len); bufp += outer_len; data/r-cran-vctrs-0.3.5/src/names.c:649: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(bufp, inner, inner_n); data/r-cran-vctrs-0.3.5/src/names.c:671: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[total_len]; data/r-cran-vctrs-0.3.5/src/order-radix.c:962:7: [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(p_x_chunk, p_x, size * sizeof(*p_x)); data/r-cran-vctrs-0.3.5/src/order-radix.c:1023: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(p_x_chunk, p_x, size * sizeof(*p_x)); data/r-cran-vctrs-0.3.5/src/order-radix.c:1286: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(p_o, p_o_aux, size * sizeof(*p_o_aux)); data/r-cran-vctrs-0.3.5/src/order-radix.c:1545: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(p_o, p_o_aux, size * sizeof(*p_o_aux)); data/r-cran-vctrs-0.3.5/src/order-radix.c:1546: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(p_x, p_x_aux, size * sizeof(*p_x_aux)); data/r-cran-vctrs-0.3.5/src/order-radix.c:1952: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(p_x_chunk, p_x, size * sizeof(*p_x)); data/r-cran-vctrs-0.3.5/src/order-radix.c:2324: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(p_o, p_o_aux, size * sizeof(*p_o_aux)); data/r-cran-vctrs-0.3.5/src/order-radix.c:2325: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(p_x, p_x_aux, size * sizeof(*p_x_aux)); data/r-cran-vctrs-0.3.5/src/order-radix.c:3251: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(p_x, p_x_aux, size * sizeof(*p_x_aux)); data/r-cran-vctrs-0.3.5/src/order-radix.c:3252: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(p_sizes, p_sizes_aux, size * sizeof(*p_sizes_aux)); data/r-cran-vctrs-0.3.5/src/utils.c:379: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(p_out, p_x, copy_size * sizeof(CTYPE)); \ data/r-cran-vctrs-0.3.5/src/utils.c:457:8: [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. static char s3_buf[200]; data/r-cran-vctrs-0.3.5/src/utils.c:469: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(buf, generic, gen_len); buf += gen_len; data/r-cran-vctrs-0.3.5/src/utils.c:471: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(buf, class, class_len); buf += class_len; data/r-cran-vctrs-0.3.5/src/utils.c:1256: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(buf, prefix, prefix_len); data/r-cran-vctrs-0.3.5/src/utils.c:1734: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 msg[FMT_BUFSIZE]; data/r-cran-vctrs-0.3.5/src/utils.c:1746: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 msg[FMT_BUFSIZE]; data/r-cran-vctrs-0.3.5/src/arg.c:96: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). size_t len = strlen(src); data/r-cran-vctrs-0.3.5/src/arg.c:181: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). size_t len = strlen(src); data/r-cran-vctrs-0.3.5/src/c.c:229:10: [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. if (!equal) { data/r-cran-vctrs-0.3.5/src/names.c:288: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). int size = strlen(name); data/r-cran-vctrs-0.3.5/src/names.c:326:11: [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). int n = strlen(name); data/r-cran-vctrs-0.3.5/src/names.c:345:11: [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). int n = strlen(name); data/r-cran-vctrs-0.3.5/src/names.c:619:19: [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). int outer_len = strlen(prefix); data/r-cran-vctrs-0.3.5/src/names.c:622:17: [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). int sep_len = strlen(sep); data/r-cran-vctrs-0.3.5/src/names.c:647:19: [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). int inner_n = strlen(inner); data/r-cran-vctrs-0.3.5/src/names.c:668: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). int total_len = 24 + strlen(prefix) + 1; data/r-cran-vctrs-0.3.5/src/utils.c:460:17: [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). int gen_len = strlen(generic); data/r-cran-vctrs-0.3.5/src/utils.c:461:19: [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). int class_len = strlen(class); data/r-cran-vctrs-0.3.5/src/utils.c:1235:15: [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). int len = strlen(CHAR(*p)); data/r-cran-vctrs-0.3.5/src/utils.c:1251:20: [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). int prefix_len = strlen(prefix); ANALYSIS SUMMARY: Hits = 43 Lines analyzed = 26401 in approximately 0.57 seconds (46449 lines/second) Physical Source Lines of Code (SLOC) = 18986 Hits@level = [0] 4 [1] 14 [2] 28 [3] 0 [4] 1 [5] 0 Hits@level+ = [0+] 47 [1+] 43 [2+] 29 [3+] 1 [4+] 1 [5+] 0 Hits/KSLOC@level+ = [0+] 2.47551 [1+] 2.26483 [2+] 1.52744 [3+] 0.0526704 [4+] 0.0526704 [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.