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/png++-0.2.10/image_info.hpp Examining data/png++-0.2.10/color.hpp Examining data/png++-0.2.10/test/generate_palette.cpp Examining data/png++-0.2.10/test/convert_color_space.cpp Examining data/png++-0.2.10/test/write_gray_16.cpp Examining data/png++-0.2.10/test/generate_gray_packed.cpp Examining data/png++-0.2.10/test/read_write_gray_packed.cpp Examining data/png++-0.2.10/test/dump.cpp Examining data/png++-0.2.10/test/read_write_param.cpp Examining data/png++-0.2.10/pixel_traits.hpp Examining data/png++-0.2.10/pixel_buffer.hpp Examining data/png++-0.2.10/io_base.hpp Examining data/png++-0.2.10/config.hpp Examining data/png++-0.2.10/palette.hpp Examining data/png++-0.2.10/end_info.hpp Examining data/png++-0.2.10/streaming_base.hpp Examining data/png++-0.2.10/info.hpp Examining data/png++-0.2.10/convert_color_space.hpp Examining data/png++-0.2.10/png.hpp Examining data/png++-0.2.10/error.hpp Examining data/png++-0.2.10/solid_pixel_buffer.hpp Examining data/png++-0.2.10/writer.hpp Examining data/png++-0.2.10/rgba_pixel.hpp Examining data/png++-0.2.10/index_pixel.hpp Examining data/png++-0.2.10/tRNS.hpp Examining data/png++-0.2.10/ga_pixel.hpp Examining data/png++-0.2.10/gray_pixel.hpp Examining data/png++-0.2.10/reader.hpp Examining data/png++-0.2.10/generator.hpp Examining data/png++-0.2.10/require_color_space.hpp Examining data/png++-0.2.10/packed_pixel.hpp Examining data/png++-0.2.10/example/pixel_generator.cpp Examining data/png++-0.2.10/consumer.hpp Examining data/png++-0.2.10/info_base.hpp Examining data/png++-0.2.10/types.hpp Examining data/png++-0.2.10/rgb_pixel.hpp Examining data/png++-0.2.10/image.hpp FINAL RESULTS: data/png++-0.2.10/io_base.hpp:48:5: [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, fmt, va); data/png++-0.2.10/error.hpp:97: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 buf[ERRBUF_SIZE] = { 0 }; data/png++-0.2.10/test/convert_color_space.cpp:67:16: [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). int bits = atoi(argv[2]); data/png++-0.2.10/consumer.hpp:144:14: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). void read(istream& stream) data/png++-0.2.10/consumer.hpp:146:13: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). read(stream, transform_identity()); data/png++-0.2.10/consumer.hpp:158:14: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). void read(istream& stream, transformation const& transform) data/png++-0.2.10/end_info.hpp:59:14: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). void read() data/png++-0.2.10/image.hpp:119:13: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). read(filename, transform_convert()); data/png++-0.2.10/image.hpp:130:13: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). read(filename.c_str(), transform); data/png++-0.2.10/image.hpp:139:13: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). read(filename, transform_convert()); data/png++-0.2.10/image.hpp:149:13: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). read(filename, transform); data/png++-0.2.10/image.hpp:175:14: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). void read(std::string const& filename) data/png++-0.2.10/image.hpp:177:13: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). read(filename, transform_convert()); data/png++-0.2.10/image.hpp:185:14: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). void read(std::string const& filename, transformation const& transform) data/png++-0.2.10/image.hpp:187:13: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). read(filename.c_str(), transform); data/png++-0.2.10/image.hpp:194:14: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). void read(char const* filename) data/png++-0.2.10/image.hpp:196:13: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). read(filename, transform_convert()); data/png++-0.2.10/image.hpp:204:14: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). void read(char const* filename, transformation const& transform) data/png++-0.2.10/image.hpp:219:14: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). void read(std::istream& stream) data/png++-0.2.10/image.hpp:229:14: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). void read(std::istream& stream, transformation const& transform) data/png++-0.2.10/image.hpp:252:20: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). pixcon.read(stream, transform); data/png++-0.2.10/info.hpp:55:14: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). void read() data/png++-0.2.10/reader.hpp:114:20: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). m_info.read(); data/png++-0.2.10/reader.hpp:138:24: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). m_end_info.read(); data/png++-0.2.10/reader.hpp:155:25: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). stream->read(reinterpret_cast< char* >(data), length); ANALYSIS SUMMARY: Hits = 25 Lines analyzed = 5859 in approximately 0.28 seconds (20769 lines/second) Physical Source Lines of Code (SLOC) = 3070 Hits@level = [0] 8 [1] 22 [2] 2 [3] 0 [4] 1 [5] 0 Hits@level+ = [0+] 33 [1+] 25 [2+] 3 [3+] 1 [4+] 1 [5+] 0 Hits/KSLOC@level+ = [0+] 10.7492 [1+] 8.14332 [2+] 0.977199 [3+] 0.325733 [4+] 0.325733 [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.