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/pd-iemmatrix-0.3.2/alias/matrix_mul_line~.c Examining data/pd-iemmatrix-0.3.2/alias/matrix_mul~.c Examining data/pd-iemmatrix-0.3.2/alias/matrix~.c Examining data/pd-iemmatrix-0.3.2/alias/mtx.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x21.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x210x3d.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x26.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x260x26.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x2a.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x2a0x7e.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x2b.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x2d.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x2e0x2a.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x2e0x2f.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x2e0x5e.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x2f.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x3a.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x3c.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x3c0x3c.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x3c0x3d.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x3d0x3d.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x3e.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x3e0x3d.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x3e0x3e.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x7c.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_0x7c0x7c.c Examining data/pd-iemmatrix-0.3.2/alias/mtx_div.c Examining data/pd-iemmatrix-0.3.2/src/iemmatrix.c Examining data/pd-iemmatrix-0.3.2/src/iemmatrix.h Examining data/pd-iemmatrix-0.3.2/src/iemmatrix_binops.c Examining data/pd-iemmatrix-0.3.2/src/iemmatrix_sources.c Examining data/pd-iemmatrix-0.3.2/src/iemmatrix_sources.h Examining data/pd-iemmatrix-0.3.2/src/iemmatrix_utility.c Examining data/pd-iemmatrix-0.3.2/src/matrix.c Examining data/pd-iemmatrix-0.3.2/src/mtx_abs.c Examining data/pd-iemmatrix-0.3.2/src/mtx_add.c Examining data/pd-iemmatrix-0.3.2/src/mtx_and.c Examining data/pd-iemmatrix-0.3.2/src/mtx_atan.c Examining data/pd-iemmatrix-0.3.2/src/mtx_atan2.c Examining data/pd-iemmatrix-0.3.2/src/mtx_bessel.c Examining data/pd-iemmatrix-0.3.2/src/mtx_binop_generic.h Examining data/pd-iemmatrix-0.3.2/src/mtx_bitand.c Examining data/pd-iemmatrix-0.3.2/src/mtx_bitleft.c Examining data/pd-iemmatrix-0.3.2/src/mtx_bitor.c Examining data/pd-iemmatrix-0.3.2/src/mtx_bitright.c Examining data/pd-iemmatrix-0.3.2/src/mtx_bspline.c Examining data/pd-iemmatrix-0.3.2/src/mtx_check.c Examining data/pd-iemmatrix-0.3.2/src/mtx_cholesky.c Examining data/pd-iemmatrix-0.3.2/src/mtx_col.c Examining data/pd-iemmatrix-0.3.2/src/mtx_colon.c Examining data/pd-iemmatrix-0.3.2/src/mtx_concat.c Examining data/pd-iemmatrix-0.3.2/src/mtx_conv.c Examining data/pd-iemmatrix-0.3.2/src/mtx_cos.c Examining data/pd-iemmatrix-0.3.2/src/mtx_cumprod.c Examining data/pd-iemmatrix-0.3.2/src/mtx_cumsum.c Examining data/pd-iemmatrix-0.3.2/src/mtx_dbtopow.c Examining data/pd-iemmatrix-0.3.2/src/mtx_dbtorms.c Examining data/pd-iemmatrix-0.3.2/src/mtx_decay.c Examining data/pd-iemmatrix-0.3.2/src/mtx_diag.c Examining data/pd-iemmatrix-0.3.2/src/mtx_diegg.c Examining data/pd-iemmatrix-0.3.2/src/mtx_diff.c Examining data/pd-iemmatrix-0.3.2/src/mtx_dispersive_dline.c Examining data/pd-iemmatrix-0.3.2/src/mtx_distance2.c Examining data/pd-iemmatrix-0.3.2/src/mtx_egg.c Examining data/pd-iemmatrix-0.3.2/src/mtx_eig.c Examining data/pd-iemmatrix-0.3.2/src/mtx_ei~.c Examining data/pd-iemmatrix-0.3.2/src/mtx_element.c Examining data/pd-iemmatrix-0.3.2/src/mtx_eq.c Examining data/pd-iemmatrix-0.3.2/src/mtx_exp.c Examining data/pd-iemmatrix-0.3.2/src/mtx_eye.c Examining data/pd-iemmatrix-0.3.2/src/mtx_fft.c Examining data/pd-iemmatrix-0.3.2/src/mtx_fill.c Examining data/pd-iemmatrix-0.3.2/src/mtx_find.c Examining data/pd-iemmatrix-0.3.2/src/mtx_gauss.c Examining data/pd-iemmatrix-0.3.2/src/mtx_ge.c Examining data/pd-iemmatrix-0.3.2/src/mtx_gt.c Examining data/pd-iemmatrix-0.3.2/src/mtx_ifft.c Examining data/pd-iemmatrix-0.3.2/src/mtx_index.c Examining data/pd-iemmatrix-0.3.2/src/mtx_int.c Examining data/pd-iemmatrix-0.3.2/src/mtx_inverse.c Examining data/pd-iemmatrix-0.3.2/src/mtx_isequal.c Examining data/pd-iemmatrix-0.3.2/src/mtx_le.c Examining data/pd-iemmatrix-0.3.2/src/mtx_log.c Examining data/pd-iemmatrix-0.3.2/src/mtx_lt.c Examining data/pd-iemmatrix-0.3.2/src/mtx_max2.c Examining data/pd-iemmatrix-0.3.2/src/mtx_mean.c Examining data/pd-iemmatrix-0.3.2/src/mtx_min2.c Examining data/pd-iemmatrix-0.3.2/src/mtx_minmax.c Examining data/pd-iemmatrix-0.3.2/src/mtx_mul.c Examining data/pd-iemmatrix-0.3.2/src/mtx_mul~.c Examining data/pd-iemmatrix-0.3.2/src/mtx_neq.c Examining data/pd-iemmatrix-0.3.2/src/mtx_not.c Examining data/pd-iemmatrix-0.3.2/src/mtx_ones.c Examining data/pd-iemmatrix-0.3.2/src/mtx_or.c Examining data/pd-iemmatrix-0.3.2/src/mtx_pack~.c Examining data/pd-iemmatrix-0.3.2/src/mtx_pivot.c Examining data/pd-iemmatrix-0.3.2/src/mtx_pow.c Examining data/pd-iemmatrix-0.3.2/src/mtx_powtodb.c Examining data/pd-iemmatrix-0.3.2/src/mtx_print.c Examining data/pd-iemmatrix-0.3.2/src/mtx_prod.c Examining data/pd-iemmatrix-0.3.2/src/mtx_qhull.c Examining data/pd-iemmatrix-0.3.2/src/mtx_qhull/entry.h Examining data/pd-iemmatrix-0.3.2/src/mtx_qhull/list.c Examining data/pd-iemmatrix-0.3.2/src/mtx_qhull/list.h Examining data/pd-iemmatrix-0.3.2/src/mtx_qhull/test_list.c Examining data/pd-iemmatrix-0.3.2/src/mtx_qhull/vectors.c Examining data/pd-iemmatrix-0.3.2/src/mtx_qhull/vectors.h Examining data/pd-iemmatrix-0.3.2/src/mtx_qhull/zhull.c Examining data/pd-iemmatrix-0.3.2/src/mtx_qhull/zhull.h Examining data/pd-iemmatrix-0.3.2/src/mtx_qr.c Examining data/pd-iemmatrix-0.3.2/src/mtx_rand.c Examining data/pd-iemmatrix-0.3.2/src/mtx_repmat.c Examining data/pd-iemmatrix-0.3.2/src/mtx_resize.c Examining data/pd-iemmatrix-0.3.2/src/mtx_reverse.c Examining data/pd-iemmatrix-0.3.2/src/mtx_rfft.c Examining data/pd-iemmatrix-0.3.2/src/mtx_rifft.c Examining data/pd-iemmatrix-0.3.2/src/mtx_rmstodb.c Examining data/pd-iemmatrix-0.3.2/src/mtx_roll.c Examining data/pd-iemmatrix-0.3.2/src/mtx_row.c Examining data/pd-iemmatrix-0.3.2/src/mtx_scroll.c Examining data/pd-iemmatrix-0.3.2/src/mtx_sin.c Examining data/pd-iemmatrix-0.3.2/src/mtx_size.c Examining data/pd-iemmatrix-0.3.2/src/mtx_slice.c Examining data/pd-iemmatrix-0.3.2/src/mtx_sndfileread.c Examining data/pd-iemmatrix-0.3.2/src/mtx_sort.c Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics.c Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/chebyshev12.c Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/chebyshev12.h Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/cmdline/chebyshev12_cmd.c Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/cmdline/legendre_a_cmd.c Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/cmdline/sharmonics_cmd.c Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/cmdline/sharmonics_normalization_cmd.c Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/legendre_a.c Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/legendre_a.h Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/sharmonics.c Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/sharmonics.h Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/sharmonics_normalization.c Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/sharmonics_normalization.h Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/sph_radial.c Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/sph_radial.h Examining data/pd-iemmatrix-0.3.2/src/mtx_spherical_radial.c Examining data/pd-iemmatrix-0.3.2/src/mtx_sub.c Examining data/pd-iemmatrix-0.3.2/src/mtx_sum.c Examining data/pd-iemmatrix-0.3.2/src/mtx_svd.c Examining data/pd-iemmatrix-0.3.2/src/mtx_trace.c Examining data/pd-iemmatrix-0.3.2/src/mtx_transpose.c Examining data/pd-iemmatrix-0.3.2/src/mtx_unpack~.c Examining data/pd-iemmatrix-0.3.2/src/mtx_zeros.c FINAL RESULTS: data/pd-iemmatrix-0.3.2/src/iemmatrix_utility.c:653: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 data/pd-iemmatrix-0.3.2/src/iemmatrix_utility.c:655: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 data/pd-iemmatrix-0.3.2/src/matrix.c:24:10: [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. # define snprintf _snprintf data/pd-iemmatrix-0.3.2/src/matrix.c:24:19: [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. # define snprintf _snprintf data/pd-iemmatrix-0.3.2/src/iemmatrix_binops.c:30: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(x->m2.atombuffer, argv, (row*col+2)*sizeof(t_atom)); data/pd-iemmatrix-0.3.2/src/iemmatrix_utility.c:138: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(x->atombuffer, argv, (row*col+2)*sizeof(t_atom)); data/pd-iemmatrix-0.3.2/src/iemmatrix_utility.c:354: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(ap, argv, col*sizeof(t_atom)); data/pd-iemmatrix-0.3.2/src/iemmatrix_utility.c:650: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[MAXPDSTRING]; data/pd-iemmatrix-0.3.2/src/matrix.c:103: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 filnam[MAXPDSTRING]; data/pd-iemmatrix-0.3.2/src/matrix.c:110:13: [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). if (!(f = fopen(filnam, "w"))) { data/pd-iemmatrix-0.3.2/src/matrix.c:169: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(x->atombuffer+2, argv, row*col*sizeof(t_atom)); data/pd-iemmatrix-0.3.2/src/mtx_concat.c:118: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 (ptr_out, ptr_in1, mtx1->col * sizeof(t_atom)); data/pd-iemmatrix-0.3.2/src/mtx_concat.c:119: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 (ptr_out+mtx1->col, ptr_in2, mtx2->col * sizeof(t_atom)); data/pd-iemmatrix-0.3.2/src/mtx_concat.c:140: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 (ptr_out, ptr_in1, mtx1->col * sizeof(t_atom)); data/pd-iemmatrix-0.3.2/src/mtx_concat.c:144: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 (ptr_out, ptr_in2, mtx2->col * sizeof(t_atom)); data/pd-iemmatrix-0.3.2/src/mtx_ei~.c:150: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(x->sl, x->sl+x->bs, sizeof(t_float)*x->sd); data/pd-iemmatrix-0.3.2/src/mtx_ei~.c:151: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(x->sr, x->sr+x->bs, sizeof(t_float)*x->sd); data/pd-iemmatrix-0.3.2/src/mtx_ei~.c:152: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(x->sl+x->sd, x->sig_in_left, sizeof(t_float)*x->bs); data/pd-iemmatrix-0.3.2/src/mtx_ei~.c:153: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(x->sr+x->sd, x->sig_in_right, sizeof(t_float)*x->bs); data/pd-iemmatrix-0.3.2/src/mtx_fill.c:205: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(list_out,argv,argc*sizeof(t_atom)); data/pd-iemmatrix-0.3.2/src/mtx_resize.c:77: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(x->atombuffer+2+(ROW-R-1)*c, argv+2+(ROW-R-1)*col, data/pd-iemmatrix-0.3.2/src/mtx_row.c:63: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(x->atombuffer+2+(x->current_row-1)*x->col, argv, data/pd-iemmatrix-0.3.2/src/mtx_row.c:68: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(x->atombuffer+2+r*x->col, argv, x->col*sizeof(t_atom)); data/pd-iemmatrix-0.3.2/src/mtx_scroll.c:31: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(x->atombuffer+2, argv+(row-rowscroll)*col, data/pd-iemmatrix-0.3.2/src/mtx_scroll.c:33: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(x->atombuffer+2+rowscroll*col, argv, data/pd-iemmatrix-0.3.2/src/mtx_sndfileread.c:146: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 filenamebuf[MAXPDSTRING], *filenamebufptr; data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/cmdline/chebyshev12_cmd.c:20:8: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). nmax=atoi(argv[1]); data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/cmdline/legendre_a_cmd.c:20:8: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). nmax=atoi(argv[1]); data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/cmdline/sharmonics_cmd.c:20:8: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). nmax=atoi(argv[1]); data/pd-iemmatrix-0.3.2/src/mtx_spherical_harmonics/cmdline/sharmonics_normalization_cmd.c:20:8: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). nmax=atoi(argv[1]); data/pd-iemmatrix-0.3.2/src/matrix.c:123: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). textlen = strlen(text); data/pd-iemmatrix-0.3.2/src/matrix.c:135: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). textlen=strlen(text); data/pd-iemmatrix-0.3.2/src/mtx_reverse.c:98:13: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). *y++ = *read; data/pd-iemmatrix-0.3.2/src/mtx_reverse.c:111:11: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). *y = *read; ANALYSIS SUMMARY: Hits = 34 Lines analyzed = 18490 in approximately 0.47 seconds (39114 lines/second) Physical Source Lines of Code (SLOC) = 13986 Hits@level = [0] 67 [1] 4 [2] 26 [3] 0 [4] 4 [5] 0 Hits@level+ = [0+] 101 [1+] 34 [2+] 30 [3+] 4 [4+] 4 [5+] 0 Hits/KSLOC@level+ = [0+] 7.22151 [1+] 2.431 [2+] 2.145 [3+] 0.286 [4+] 0.286 [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.