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/catch-1.12.1/include/catch.hpp Examining data/catch-1.12.1/include/catch_session.hpp Examining data/catch-1.12.1/include/catch_with_main.hpp Examining data/catch-1.12.1/include/external/clara.h Examining data/catch-1.12.1/include/external/tbc_text_format.h Examining data/catch-1.12.1/include/internal/catch_approx.hpp Examining data/catch-1.12.1/include/internal/catch_assertionresult.h Examining data/catch-1.12.1/include/internal/catch_assertionresult.hpp Examining data/catch-1.12.1/include/internal/catch_capture.hpp Examining data/catch-1.12.1/include/internal/catch_clara.h Examining data/catch-1.12.1/include/internal/catch_commandline.hpp Examining data/catch-1.12.1/include/internal/catch_common.h Examining data/catch-1.12.1/include/internal/catch_common.hpp Examining data/catch-1.12.1/include/internal/catch_compiler_capabilities.h Examining data/catch-1.12.1/include/internal/catch_config.hpp Examining data/catch-1.12.1/include/internal/catch_console_colour.hpp Examining data/catch-1.12.1/include/internal/catch_console_colour_impl.hpp Examining data/catch-1.12.1/include/internal/catch_context.h Examining data/catch-1.12.1/include/internal/catch_context_impl.hpp Examining data/catch-1.12.1/include/internal/catch_debugger.h Examining data/catch-1.12.1/include/internal/catch_debugger.hpp Examining data/catch-1.12.1/include/internal/catch_default_main.hpp Examining data/catch-1.12.1/include/internal/catch_errno_guard.hpp Examining data/catch-1.12.1/include/internal/catch_evaluate.hpp Examining data/catch-1.12.1/include/internal/catch_exception_translator_registry.hpp Examining data/catch-1.12.1/include/internal/catch_expression_lhs.hpp Examining data/catch-1.12.1/include/internal/catch_fatal_condition.hpp Examining data/catch-1.12.1/include/internal/catch_generators.hpp Examining data/catch-1.12.1/include/internal/catch_generators_impl.hpp Examining data/catch-1.12.1/include/internal/catch_impl.hpp Examining data/catch-1.12.1/include/internal/catch_interfaces_capture.h Examining data/catch-1.12.1/include/internal/catch_interfaces_config.h Examining data/catch-1.12.1/include/internal/catch_interfaces_exception.h Examining data/catch-1.12.1/include/internal/catch_interfaces_generators.h Examining data/catch-1.12.1/include/internal/catch_interfaces_registry_hub.h Examining data/catch-1.12.1/include/internal/catch_interfaces_reporter.h Examining data/catch-1.12.1/include/internal/catch_interfaces_runner.h Examining data/catch-1.12.1/include/internal/catch_interfaces_tag_alias_registry.h Examining data/catch-1.12.1/include/internal/catch_interfaces_testcase.h Examining data/catch-1.12.1/include/internal/catch_legacy_reporter_adapter.h Examining data/catch-1.12.1/include/internal/catch_legacy_reporter_adapter.hpp Examining data/catch-1.12.1/include/internal/catch_list.hpp Examining data/catch-1.12.1/include/internal/catch_matchers.hpp Examining data/catch-1.12.1/include/internal/catch_matchers_string.h Examining data/catch-1.12.1/include/internal/catch_matchers_string.hpp Examining data/catch-1.12.1/include/internal/catch_matchers_vector.h Examining data/catch-1.12.1/include/internal/catch_message.h Examining data/catch-1.12.1/include/internal/catch_message.hpp Examining data/catch-1.12.1/include/internal/catch_notimplemented_exception.h Examining data/catch-1.12.1/include/internal/catch_notimplemented_exception.hpp Examining data/catch-1.12.1/include/internal/catch_objc.hpp Examining data/catch-1.12.1/include/internal/catch_objc_arc.hpp Examining data/catch-1.12.1/include/internal/catch_option.hpp Examining data/catch-1.12.1/include/internal/catch_platform.h Examining data/catch-1.12.1/include/internal/catch_ptr.hpp Examining data/catch-1.12.1/include/internal/catch_reenable_warnings.h Examining data/catch-1.12.1/include/internal/catch_registry_hub.hpp Examining data/catch-1.12.1/include/internal/catch_reporter_registrars.hpp Examining data/catch-1.12.1/include/internal/catch_reporter_registry.hpp Examining data/catch-1.12.1/include/internal/catch_result_builder.h Examining data/catch-1.12.1/include/internal/catch_result_builder.hpp Examining data/catch-1.12.1/include/internal/catch_result_type.h Examining data/catch-1.12.1/include/internal/catch_run_context.hpp Examining data/catch-1.12.1/include/internal/catch_section.h Examining data/catch-1.12.1/include/internal/catch_section.hpp Examining data/catch-1.12.1/include/internal/catch_section_info.h Examining data/catch-1.12.1/include/internal/catch_section_info.hpp Examining data/catch-1.12.1/include/internal/catch_stream.h Examining data/catch-1.12.1/include/internal/catch_stream.hpp Examining data/catch-1.12.1/include/internal/catch_streambuf.h Examining data/catch-1.12.1/include/internal/catch_suppress_warnings.h Examining data/catch-1.12.1/include/internal/catch_tag_alias.h Examining data/catch-1.12.1/include/internal/catch_tag_alias_registry.h Examining data/catch-1.12.1/include/internal/catch_tag_alias_registry.hpp Examining data/catch-1.12.1/include/internal/catch_test_case_info.h Examining data/catch-1.12.1/include/internal/catch_test_case_info.hpp Examining data/catch-1.12.1/include/internal/catch_test_case_registry_impl.hpp Examining data/catch-1.12.1/include/internal/catch_test_case_tracker.hpp Examining data/catch-1.12.1/include/internal/catch_test_registry.hpp Examining data/catch-1.12.1/include/internal/catch_test_spec.hpp Examining data/catch-1.12.1/include/internal/catch_test_spec_parser.hpp Examining data/catch-1.12.1/include/internal/catch_text.h Examining data/catch-1.12.1/include/internal/catch_timer.h Examining data/catch-1.12.1/include/internal/catch_timer.hpp Examining data/catch-1.12.1/include/internal/catch_tostring.h Examining data/catch-1.12.1/include/internal/catch_tostring.hpp Examining data/catch-1.12.1/include/internal/catch_totals.hpp Examining data/catch-1.12.1/include/internal/catch_type_traits.hpp Examining data/catch-1.12.1/include/internal/catch_version.h Examining data/catch-1.12.1/include/internal/catch_version.hpp Examining data/catch-1.12.1/include/internal/catch_wildcard_pattern.hpp Examining data/catch-1.12.1/include/internal/catch_windows_h_proxy.h Examining data/catch-1.12.1/include/internal/catch_xmlwriter.hpp Examining data/catch-1.12.1/include/reporters/catch_reporter_automake.hpp Examining data/catch-1.12.1/include/reporters/catch_reporter_bases.hpp Examining data/catch-1.12.1/include/reporters/catch_reporter_compact.hpp Examining data/catch-1.12.1/include/reporters/catch_reporter_console.hpp Examining data/catch-1.12.1/include/reporters/catch_reporter_junit.hpp Examining data/catch-1.12.1/include/reporters/catch_reporter_multi.hpp Examining data/catch-1.12.1/include/reporters/catch_reporter_tap.hpp Examining data/catch-1.12.1/include/reporters/catch_reporter_teamcity.hpp Examining data/catch-1.12.1/include/reporters/catch_reporter_xml.hpp Examining data/catch-1.12.1/projects/Benchmark/BenchMain.cpp Examining data/catch-1.12.1/projects/Benchmark/StringificationBench.cpp Examining data/catch-1.12.1/projects/SelfTest/ApproxTests.cpp Examining data/catch-1.12.1/projects/SelfTest/BDDTests.cpp Examining data/catch-1.12.1/projects/SelfTest/ClassTests.cpp Examining data/catch-1.12.1/projects/SelfTest/CmdLineTests.cpp Examining data/catch-1.12.1/projects/SelfTest/CompilationTests.cpp Examining data/catch-1.12.1/projects/SelfTest/ConditionTests.cpp Examining data/catch-1.12.1/projects/SelfTest/DecompositionTests.cpp Examining data/catch-1.12.1/projects/SelfTest/EnumToString.cpp Examining data/catch-1.12.1/projects/SelfTest/ExceptionTests.cpp Examining data/catch-1.12.1/projects/SelfTest/GeneratorTests.cpp Examining data/catch-1.12.1/projects/SelfTest/MatchersTests.cpp Examining data/catch-1.12.1/projects/SelfTest/MessageTests.cpp Examining data/catch-1.12.1/projects/SelfTest/MiscTests.cpp Examining data/catch-1.12.1/projects/SelfTest/PartTrackerTests.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_common.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_console_colour.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_debugger.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_interfaces_capture.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_interfaces_config.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_interfaces_exception.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_interfaces_generators.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_interfaces_registry_hub.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_interfaces_reporter.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_interfaces_runner.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_interfaces_testcase.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_message.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_option.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_ptr.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_stream.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_streambuf.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_test_case_tracker.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_test_spec.cpp Examining data/catch-1.12.1/projects/SelfTest/SurrogateCpps/catch_xmlwriter.cpp Examining data/catch-1.12.1/projects/SelfTest/TagAliasTests.cpp Examining data/catch-1.12.1/projects/SelfTest/TestMain.cpp Examining data/catch-1.12.1/projects/SelfTest/ToStringGeneralTests.cpp Examining data/catch-1.12.1/projects/SelfTest/ToStringPair.cpp Examining data/catch-1.12.1/projects/SelfTest/ToStringTuple.cpp Examining data/catch-1.12.1/projects/SelfTest/ToStringVector.cpp Examining data/catch-1.12.1/projects/SelfTest/ToStringWhich.cpp Examining data/catch-1.12.1/projects/SelfTest/TrickyTests.cpp Examining data/catch-1.12.1/projects/SelfTest/VariadicMacrosTests.cpp Examining data/catch-1.12.1/single_include/catch.hpp Examining data/catch-1.12.1/test_package/MainTest.cpp FINAL RESULTS: data/catch-1.12.1/include/internal/catch_common.hpp:95:18: [3] (random) srand: 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. std::srand( config.rngSeed() ); data/catch-1.12.1/single_include/catch.hpp:8784:18: [3] (random) srand: 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. std::srand( config.rngSeed() ); data/catch-1.12.1/include/catch_session.hpp:185:35: [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 **utf8Argv = new char *[ argc ]; data/catch-1.12.1/include/internal/catch_fatal_condition.hpp:139:16: [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 altStackMem[SIGSTKSZ]; data/catch-1.12.1/include/internal/catch_option.hpp:71:13: [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 storage[sizeof(T)]; data/catch-1.12.1/include/internal/catch_stream.hpp:23: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 data[bufferSize]; data/catch-1.12.1/include/internal/catch_stream.hpp:61:15: [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). m_ofs.open( filename.c_str() ); data/catch-1.12.1/include/internal/catch_test_case_tracker.hpp:193:14: [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). void open() { data/catch-1.12.1/include/internal/catch_test_case_tracker.hpp:287: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). open(); data/catch-1.12.1/include/internal/catch_test_case_tracker.hpp:333:26: [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). tracker->open(); data/catch-1.12.1/include/internal/catch_tostring.h:80:23: [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. struct TrueType { char sizer[1]; }; data/catch-1.12.1/include/internal/catch_tostring.h:81:24: [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. struct FalseType { char sizer[2]; }; data/catch-1.12.1/include/internal/catch_tostring.hpp:29:21: [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 asChar[sizeof (int)]; data/catch-1.12.1/include/reporters/catch_reporter_bases.hpp:30:13: [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 buffer[maxDoubleSize]; data/catch-1.12.1/include/reporters/catch_reporter_bases.hpp:37:13: [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(buffer, "%.3f", duration); data/catch-1.12.1/include/reporters/catch_reporter_bases.hpp:266:16: [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 line[CATCH_CONFIG_CONSOLE_WIDTH] = {0}; data/catch-1.12.1/include/reporters/catch_reporter_junit.hpp:37:13: [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 timeStamp[timeStampSize]; data/catch-1.12.1/single_include/catch.hpp:1612:23: [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. struct TrueType { char sizer[1]; }; data/catch-1.12.1/single_include/catch.hpp:1613:24: [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. struct FalseType { char sizer[2]; }; data/catch-1.12.1/single_include/catch.hpp:3207:13: [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 storage[sizeof(T)]; data/catch-1.12.1/single_include/catch.hpp:6214:14: [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). void open() { data/catch-1.12.1/single_include/catch.hpp:6308: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). open(); data/catch-1.12.1/single_include/catch.hpp:6354:26: [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). tracker->open(); data/catch-1.12.1/single_include/catch.hpp:6543:16: [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 altStackMem[SIGSTKSZ]; data/catch-1.12.1/single_include/catch.hpp:7189:35: [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 **utf8Argv = new char *[ argc ]; data/catch-1.12.1/single_include/catch.hpp:7703: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 data[bufferSize]; data/catch-1.12.1/single_include/catch.hpp:7740:15: [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). m_ofs.open( filename.c_str() ); data/catch-1.12.1/single_include/catch.hpp:8987:21: [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 asChar[sizeof (int)]; data/catch-1.12.1/single_include/catch.hpp:9629:13: [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 buffer[maxDoubleSize]; data/catch-1.12.1/single_include/catch.hpp:9636:13: [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(buffer, "%.3f", duration); data/catch-1.12.1/single_include/catch.hpp:9863:16: [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 line[CATCH_CONFIG_CONSOLE_WIDTH] = {0}; data/catch-1.12.1/single_include/catch.hpp:10443:13: [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 timeStamp[timeStampSize]; data/catch-1.12.1/include/catch_session.hpp:211:40: [1] (buffer) getchar: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). static_cast<void>(std::getchar()); data/catch-1.12.1/include/catch_session.hpp:216:40: [1] (buffer) getchar: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). static_cast<void>(std::getchar()); data/catch-1.12.1/include/internal/catch_common.hpp:19:50: [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 s.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), s.begin()); data/catch-1.12.1/include/internal/catch_common.hpp:25:50: [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 s.size() >= suffix.size() && std::equal(suffix.rbegin(), suffix.rend(), s.rbegin()); data/catch-1.12.1/single_include/catch.hpp:7215:40: [1] (buffer) getchar: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). static_cast<void>(std::getchar()); data/catch-1.12.1/single_include/catch.hpp:7220:40: [1] (buffer) getchar: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). static_cast<void>(std::getchar()); data/catch-1.12.1/single_include/catch.hpp:8708:50: [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 s.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), s.begin()); data/catch-1.12.1/single_include/catch.hpp:8714:50: [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 s.size() >= suffix.size() && std::equal(suffix.rbegin(), suffix.rend(), s.rbegin()); ANALYSIS SUMMARY: Hits = 40 Lines analyzed = 29168 in approximately 0.65 seconds (44548 lines/second) Physical Source Lines of Code (SLOC) = 22257 Hits@level = [0] 1 [1] 8 [2] 30 [3] 2 [4] 0 [5] 0 Hits@level+ = [0+] 41 [1+] 40 [2+] 32 [3+] 2 [4+] 0 [5+] 0 Hits/KSLOC@level+ = [0+] 1.84212 [1+] 1.79719 [2+] 1.43775 [3+] 0.0898594 [4+] 0 [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.