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/openmsx-catapult-16.0/src/RomTypeDlg.h Examining data/openmsx-catapult-16.0/src/CatapultConfigDlg.cpp Examining data/openmsx-catapult-16.0/src/CatapultXMLParser.cpp Examining data/openmsx-catapult-16.0/src/InputPage.h Examining data/openmsx-catapult-16.0/src/CatapultXMLParser.h Examining data/openmsx-catapult-16.0/src/wxCatapultApp.cpp Examining data/openmsx-catapult-16.0/src/ConfigurationData.h Examining data/openmsx-catapult-16.0/src/openMSXController.cpp Examining data/openmsx-catapult-16.0/src/resource.h Examining data/openmsx-catapult-16.0/src/wxCatapultFrm.cpp Examining data/openmsx-catapult-16.0/src/SessionPage.h Examining data/openmsx-catapult-16.0/src/wxCatapultFrm.h Examining data/openmsx-catapult-16.0/src/Version.h Examining data/openmsx-catapult-16.0/src/PipeConnectThread.h Examining data/openmsx-catapult-16.0/src/AudioControlPage.cpp Examining data/openmsx-catapult-16.0/src/StatusPage.cpp Examining data/openmsx-catapult-16.0/src/MiscControlPage.cpp Examining data/openmsx-catapult-16.0/src/openMSXController.h Examining data/openmsx-catapult-16.0/src/VideoControlPage.cpp Examining data/openmsx-catapult-16.0/src/utils.cpp Examining data/openmsx-catapult-16.0/src/AboutDlg.h Examining data/openmsx-catapult-16.0/src/IPSSelectionDlg.cpp Examining data/openmsx-catapult-16.0/src/SessionPage.cpp Examining data/openmsx-catapult-16.0/src/StatusPage.h Examining data/openmsx-catapult-16.0/src/AudioControlPage.h Examining data/openmsx-catapult-16.0/src/RomTypeDlg.cpp Examining data/openmsx-catapult-16.0/src/ConfigurationData.cpp Examining data/openmsx-catapult-16.0/src/IPSSelectionDlg.h Examining data/openmsx-catapult-16.0/src/AboutDlg.cpp Examining data/openmsx-catapult-16.0/src/CatapultConfigDlg.h Examining data/openmsx-catapult-16.0/src/CatapultPage.cpp Examining data/openmsx-catapult-16.0/src/ScreenShotDlg.h Examining data/openmsx-catapult-16.0/src/CheckConfigsDlg.cpp Examining data/openmsx-catapult-16.0/src/PipeReadThread.h Examining data/openmsx-catapult-16.0/src/PipeReadThread.cpp Examining data/openmsx-catapult-16.0/src/VideoControlPage.h Examining data/openmsx-catapult-16.0/src/utils.h Examining data/openmsx-catapult-16.0/src/CatapultPage.h Examining data/openmsx-catapult-16.0/src/wxCatapultApp.h Examining data/openmsx-catapult-16.0/src/InputPage.cpp Examining data/openmsx-catapult-16.0/src/Version.cpp Examining data/openmsx-catapult-16.0/src/FullScreenDlg.cpp Examining data/openmsx-catapult-16.0/src/MiscControlPage.h Examining data/openmsx-catapult-16.0/src/FullScreenDlg.h Examining data/openmsx-catapult-16.0/src/PipeConnectThread.cpp Examining data/openmsx-catapult-16.0/src/CheckConfigsDlg.h Examining data/openmsx-catapult-16.0/src/ScreenShotDlg.cpp FINAL RESULTS: data/openmsx-catapult-16.0/src/CheckConfigsDlg.cpp:239:2: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). strcpy(buffer, (const char*)(cmd.mb_str(wxConvUTF8))); data/openmsx-catapult-16.0/src/CheckConfigsDlg.cpp:240:11: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. result = system(buffer); data/openmsx-catapult-16.0/src/openMSXController.cpp:1161:3: [4] (shell) execvp: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. execvp(argv[0], argv); data/openmsx-catapult-16.0/src/wxCatapultFrm.cpp:33:20: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. #define unisprintf sprintf data/openmsx-catapult-16.0/src/CheckConfigsDlg.cpp:237: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 buffer[1000]; data/openmsx-catapult-16.0/src/PipeReadThread.cpp:18: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 buffer[1000]; data/openmsx-catapult-16.0/src/openMSXController.cpp:243: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(cmd, "<command>", 9); data/openmsx-catapult-16.0/src/openMSXController.cpp:244: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(cmd + 9, buffer, len); data/openmsx-catapult-16.0/src/openMSXController.cpp:245: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(cmd + 9 + len, "</command>\n", 11); data/openmsx-catapult-16.0/src/openMSXController.cpp:1108:2: [2] (buffer) TCHAR: 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. TCHAR title[11]; data/openmsx-catapult-16.0/src/openMSXController.cpp:1153: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(cmd, command.c_str(), len + 1); data/openmsx-catapult-16.0/src/PipeReadThread.cpp:20:23: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ssize_t bytesRead = read(m_descriptor, buffer, 1000); data/openmsx-catapult-16.0/src/openMSXController.cpp:91:40: [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). WriteMessage((const xmlChar*)initial, strlen(initial)); data/openmsx-catapult-16.0/src/openMSXController.cpp:240:13: [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). auto len = strlen(reinterpret_cast<const char*>(buffer)); data/openmsx-catapult-16.0/src/openMSXController.cpp:1110:53: [1] (buffer) _tcslen: 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). if (ProcessId == info->ProcessInfo->dwProcessId && _tcslen(title) != 0) { ANALYSIS SUMMARY: Hits = 15 Lines analyzed = 7471 in approximately 0.20 seconds (37216 lines/second) Physical Source Lines of Code (SLOC) = 6592 Hits@level = [0] 0 [1] 4 [2] 7 [3] 0 [4] 4 [5] 0 Hits@level+ = [0+] 15 [1+] 15 [2+] 11 [3+] 4 [4+] 4 [5+] 0 Hits/KSLOC@level+ = [0+] 2.27549 [1+] 2.27549 [2+] 1.66869 [3+] 0.606796 [4+] 0.606796 [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.