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/libwpg-0.3.3/src/fuzz/wpgfuzzer.cpp Examining data/libwpg-0.3.3/src/lib/WPGBitmap.h Examining data/libwpg-0.3.3/src/lib/WPG2Parser.h Examining data/libwpg-0.3.3/src/lib/libwpg_utils.cpp Examining data/libwpg-0.3.3/src/lib/WPG1Parser.h Examining data/libwpg-0.3.3/src/lib/WPGTextDataHandler.cpp Examining data/libwpg-0.3.3/src/lib/WPGHeader.cpp Examining data/libwpg-0.3.3/src/lib/WPGColor.cpp Examining data/libwpg-0.3.3/src/lib/WPGBitmap.cpp Examining data/libwpg-0.3.3/src/lib/WPGColor.h Examining data/libwpg-0.3.3/src/lib/WPGXParser.h Examining data/libwpg-0.3.3/src/lib/WPGDashArray.cpp Examining data/libwpg-0.3.3/src/lib/WPGXParser.cpp Examining data/libwpg-0.3.3/src/lib/WPG1Parser.cpp Examining data/libwpg-0.3.3/src/lib/WPGHeader.h Examining data/libwpg-0.3.3/src/lib/libwpg_utils.h Examining data/libwpg-0.3.3/src/lib/WPGraphics.cpp Examining data/libwpg-0.3.3/src/lib/WPGDashArray.h Examining data/libwpg-0.3.3/src/lib/WPG2Parser.cpp Examining data/libwpg-0.3.3/src/lib/WPGTextDataHandler.h Examining data/libwpg-0.3.3/src/conv/raw/wpg2raw.cpp Examining data/libwpg-0.3.3/src/conv/svg/wpg2svg.cpp Examining data/libwpg-0.3.3/inc/libwpg/WPGraphics.h Examining data/libwpg-0.3.3/inc/libwpg/libwpg.h FINAL RESULTS: data/libwpg-0.3.3/src/lib/WPGColor.cpp:71:9: [4] (format) sprintf: Potential format string problem (CWE-134). Make format string constant. sColor.sprintf("#%.2x%.2x%.2x", red, green, blue); data/libwpg-0.3.3/src/lib/libwpg_utils.cpp:66:2: [4] (format) vfprintf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. vfprintf(stderr, format, args); data/libwpg-0.3.3/src/lib/libwpg_utils.h:38:62: [4] (format) printf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. #define WPG_ATTRIBUTE_PRINTF(fmt, arg) __attribute__((format(printf, fmt, arg))) data/libwpg-0.3.3/src/lib/WPG2Parser.cpp:1883:12: [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. unsigned char data[256]; data/libwpg-0.3.3/src/lib/WPG2Parser.cpp:2312:12: [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 *f = fopen(filename.str().c_str(), "wb"); data/libwpg-0.3.3/src/lib/WPGBitmap.cpp:247:12: [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 *f = fopen(filename.str().c_str(), "wb"); data/libwpg-0.3.3/src/lib/WPGHeader.h:46:11: [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. unsigned char m_identifier[4]; // should always be 0xFF followed by "WPC" data/libwpg-0.3.3/src/lib/WPG2Parser.cpp:2303:46: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). const unsigned char *const data = m_input->read(m_recordEnd - m_input->tell(), numBytes); data/libwpg-0.3.3/src/lib/WPG2Parser.cpp:2421:45: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). const unsigned char *const data = m_input->read(m_recordEnd - m_input->tell(), numBytes); data/libwpg-0.3.3/src/lib/WPGHeader.cpp:67:39: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). unsigned char const *prefix = input->read(26, n); data/libwpg-0.3.3/src/lib/WPGXParser.cpp:46:36: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). unsigned char const *p = m_input->read(1, numBytesRead); data/libwpg-0.3.3/src/lib/libwpg_utils.cpp:43:40: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). const unsigned char *const p = input->read(1, numBytesRead); ANALYSIS SUMMARY: Hits = 12 Lines analyzed = 5886 in approximately 0.17 seconds (34068 lines/second) Physical Source Lines of Code (SLOC) = 4365 Hits@level = [0] 24 [1] 5 [2] 4 [3] 0 [4] 3 [5] 0 Hits@level+ = [0+] 36 [1+] 12 [2+] 7 [3+] 3 [4+] 3 [5+] 0 Hits/KSLOC@level+ = [0+] 8.24742 [1+] 2.74914 [2+] 1.60367 [3+] 0.687285 [4+] 0.687285 [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.