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/scikit-learn-0.23.2/sklearn/linear_model/_sgd_fast_helpers.h Examining data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/_cython_blas_helpers.h Examining data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/liblinear_helper.c Examining data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/linear.cpp Examining data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/linear.h Examining data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/tron.cpp Examining data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/tron.h Examining data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_helper.c Examining data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_sparse_helper.c Examining data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_template.cpp Examining data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/svm.cpp Examining data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/svm.h Examining data/scikit-learn-0.23.2/sklearn/svm/src/newrand/newrand.h Examining data/scikit-learn-0.23.2/sklearn/utils/src/MurmurHash3.cpp Examining data/scikit-learn-0.23.2/sklearn/utils/src/MurmurHash3.h FINAL RESULTS: data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/linear.cpp:76:2: [4] (format) vsprintf: Potential format string problem (CWE-134). Make format string constant. vsprintf(buf,fmt,ap); data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/tron.cpp:26:2: [4] (format) vsprintf: Potential format string problem (CWE-134). Make format string constant. vsprintf(buf,fmt,ap); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/svm.cpp:114:2: [4] (format) vsprintf: Potential format string problem (CWE-134). Make format string constant. vsprintf(buf,fmt,ap); data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/liblinear_helper.c:199: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(data, model->w, len * sizeof(double)); data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/linear.cpp:57:2: [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((void *)dst,(void *)src,sizeof(T)*n); data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/linear.cpp:73:2: [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[BUFSIZ]; data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/linear.cpp:2760: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). FILE *fp = fopen(model_file_name,"w"); data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/linear.cpp:2805: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). FILE *fp = fopen(model_file_name,"r"); data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/linear.cpp:2821:2: [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 cmd[81]; data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/tron.cpp:23:2: [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[BUFSIZ]; data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/tron.cpp:80: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(w_new, w, sizeof(double)*n); data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/tron.cpp:116:4: [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(w, w_new, sizeof(double)*n); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_helper.c:150:9: [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(model->nSV, nSV, model->nr_class * sizeof(int)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_helper.c:171:9: [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(model->probA, probA, m * sizeof(double)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_helper.c:174:9: [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(model->probB, probB, m * sizeof(double)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_helper.c:231:9: [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(temp, model->sv_coef[i], sizeof(double) * model->l); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_helper.c:260:9: [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 (tdata, model->SV[i].values, dim * sizeof(double)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_helper.c:267: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 (data, model->sv_ind, (model->l) * sizeof(int)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_helper.c:277: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(data, model->nSV, model->nr_class * sizeof(int)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_helper.c:282: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(data, model->probA, dims[0] * sizeof(double)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_helper.c:287: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(data, model->probB, dims[0] * sizeof(double)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_sparse_helper.c:138:9: [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(model->nSV, nSV, model->nr_class * sizeof(int)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_sparse_helper.c:154:9: [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(model->sv_coef[i], dsv_coef, (model->l) * sizeof(double)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_sparse_helper.c:170:9: [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(model->probA, probA, m * sizeof(double)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_sparse_helper.c:173:9: [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(model->probB, probB, m * sizeof(double)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_sparse_helper.c:332: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 (data, model->sv_ind, (model->l) * sizeof(int)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_sparse_helper.c:345:9: [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(temp, model->sv_coef[i], sizeof(double) * model->l); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_sparse_helper.c:361: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(data, model->nSV, model->nr_class * sizeof(int)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_sparse_helper.c:371: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(data, model->label, model->nr_class * sizeof(int)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_sparse_helper.c:376: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(data, model->probA, dims[0] * sizeof(double)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/libsvm_sparse_helper.c:381: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(data, model->probB, dims[0] * sizeof(double)); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/svm.cpp:85:2: [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((void *)dst,(void *)src,sizeof(T)*n); data/scikit-learn-0.23.2/sklearn/svm/src/libsvm/svm.cpp:111:2: [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[BUFSIZ]; data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/linear.cpp:2824:3: [1] (buffer) fscanf: It's unclear if the %s limit in the format string is small enough (CWE-120). Check that the limit is sufficiently small, or use a different input function. fscanf(fp,"%80s",cmd); data/scikit-learn-0.23.2/sklearn/svm/src/liblinear/linear.cpp:2827:4: [1] (buffer) fscanf: It's unclear if the %s limit in the format string is small enough (CWE-120). Check that the limit is sufficiently small, or use a different input function. fscanf(fp,"%80s",cmd); ANALYSIS SUMMARY: Hits = 35 Lines analyzed = 8333 in approximately 2.25 seconds (3696 lines/second) Physical Source Lines of Code (SLOC) = 6596 Hits@level = [0] 23 [1] 2 [2] 30 [3] 0 [4] 3 [5] 0 Hits@level+ = [0+] 58 [1+] 35 [2+] 33 [3+] 3 [4+] 3 [5+] 0 Hits/KSLOC@level+ = [0+] 8.79321 [1+] 5.30625 [2+] 5.00303 [3+] 0.454821 [4+] 0.454821 [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.