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/ufo-core-0.16.0.52.gbd831ab/bin/ufo-launch.c Examining data/ufo-core-0.16.0.52.gbd831ab/bin/ufo-query.c Examining data/ufo-core-0.16.0.52.gbd831ab/bin/ufo-runjson.c Examining data/ufo-core-0.16.0.52.gbd831ab/python/src/ufo.c Examining data/ufo-core-0.16.0.52.gbd831ab/tests/unit/test-buffer.c Examining data/ufo-core-0.16.0.52.gbd831ab/tests/unit/test-graph.c Examining data/ufo-core-0.16.0.52.gbd831ab/tests/unit/test-node.c Examining data/ufo-core-0.16.0.52.gbd831ab/tests/unit/test-profiler.c Examining data/ufo-core-0.16.0.52.gbd831ab/tests/unit/test-suite.c Examining data/ufo-core-0.16.0.52.gbd831ab/tests/unit/test-suite.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-base-scheduler.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-base-scheduler.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-basic-ops.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-basic-ops.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-buffer.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-buffer.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-cl.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-copy-task.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-copy-task.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-copyable-iface.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-copyable-iface.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-cpu-node.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-cpu-node.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-dummy-task.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-dummy-task.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-fixed-scheduler.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-fixed-scheduler.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-gpu-node.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-gpu-node.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-graph.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-graph.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-group-scheduler.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-group-scheduler.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-group.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-group.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-input-task.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-input-task.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-local-scheduler.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-local-scheduler.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-method-iface.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-method-iface.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-node.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-node.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-output-task.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-output-task.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-plugin-manager.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-plugin-manager.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-priv.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-priv.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-processor.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-processor.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-profiler.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-profiler.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-resources.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-resources.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-scheduler.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-scheduler.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-task-graph.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-task-graph.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-task-iface.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-task-iface.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-task-node.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-task-node.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-transform-iface.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-transform-iface.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-two-way-queue.c Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-two-way-queue.h Examining data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo.h FINAL RESULTS: data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-group-scheduler.c:282:32: [3] (random) g_random_int_range: 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. g_random_int_range (0, g_list_length (group->tasks))); data/ufo-core-0.16.0.52.gbd831ab/bin/ufo-launch.c:67:25: [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). DEFINE_CAST (uchar, atoi) data/ufo-core-0.16.0.52.gbd831ab/bin/ufo-launch.c:68:25: [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). DEFINE_CAST (int, atoi) data/ufo-core-0.16.0.52.gbd831ab/bin/ufo-launch.c:69:25: [2] (integer) atol: 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). DEFINE_CAST (long, atol) data/ufo-core-0.16.0.52.gbd831ab/bin/ufo-launch.c:70:25: [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). DEFINE_CAST (uint, atoi) data/ufo-core-0.16.0.52.gbd831ab/bin/ufo-launch.c:71:25: [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). DEFINE_CAST (uint64, atoi) data/ufo-core-0.16.0.52.gbd831ab/bin/ufo-launch.c:72:25: [2] (integer) atol: 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). DEFINE_CAST (ulong, atol) data/ufo-core-0.16.0.52.gbd831ab/python/src/ufo.c:70: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 (host_array, PyArray_DATA (np_array), ufo_buffer_get_size (buffer)); data/ufo-core-0.16.0.52.gbd831ab/python/src/ufo.c:108: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 (host_array, PyArray_DATA (np_array), ufo_buffer_get_size (buffer)); data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-buffer.c:808: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 (host_array, array, priv->size); data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-buffer.c:1072:21: [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 (dst, src , dst_row_pitch); data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-graph.c:679:10: [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). fp = fopen (filename, "w"); data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-priv.c:120:10: [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). fp = fopen (filename, "w"); data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-resources.c:182:16: [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 (filename, "r"); data/ufo-core-0.16.0.52.gbd831ab/bin/ufo-launch.c:255:12: [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. Token *equal; data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-node.c:188:37: [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 UFO_NODE_GET_CLASS (n1)->equal (n1, n2); data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-node.h:66:17: [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. gboolean (*equal) (UfoNode *n1, data/ufo-core-0.16.0.52.gbd831ab/ufo/ufo-task-graph.c:127:69: [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). json_parser_load_from_data (json_parser, data, (gssize) strlen (data), &tmp_error); ANALYSIS SUMMARY: Hits = 18 Lines analyzed = 16719 in approximately 0.39 seconds (43357 lines/second) Physical Source Lines of Code (SLOC) = 10598 Hits@level = [0] 8 [1] 4 [2] 13 [3] 1 [4] 0 [5] 0 Hits@level+ = [0+] 26 [1+] 18 [2+] 14 [3+] 1 [4+] 0 [5+] 0 Hits/KSLOC@level+ = [0+] 2.45329 [1+] 1.69843 [2+] 1.321 [3+] 0.0943574 [4+] 0 [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.