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/libpagemaker-0.0.4/src/fuzz/pmdfuzzer.cpp Examining data/libpagemaker-0.0.4/src/lib/PMDTypes.cpp Examining data/libpagemaker-0.0.4/src/lib/PMDRecord.h Examining data/libpagemaker-0.0.4/src/lib/PMDPage.h Examining data/libpagemaker-0.0.4/src/lib/constants.h Examining data/libpagemaker-0.0.4/src/lib/offsets.h Examining data/libpagemaker-0.0.4/src/lib/PMDParser.cpp Examining data/libpagemaker-0.0.4/src/lib/PMDTypes.h Examining data/libpagemaker-0.0.4/src/lib/OutputShape.cpp Examining data/libpagemaker-0.0.4/src/lib/OutputShape.h Examining data/libpagemaker-0.0.4/src/lib/geometry.cpp Examining data/libpagemaker-0.0.4/src/lib/PMDocument.cpp Examining data/libpagemaker-0.0.4/src/lib/libpagemaker_utils.cpp Examining data/libpagemaker-0.0.4/src/lib/PMDParser.h Examining data/libpagemaker-0.0.4/src/lib/Units.h Examining data/libpagemaker-0.0.4/src/lib/PMDExceptions.h Examining data/libpagemaker-0.0.4/src/lib/geometry.h Examining data/libpagemaker-0.0.4/src/lib/PMDCollector.cpp Examining data/libpagemaker-0.0.4/src/lib/PMDCollector.h Examining data/libpagemaker-0.0.4/src/lib/libpagemaker_utils.h Examining data/libpagemaker-0.0.4/src/conv/raw/pmd2raw.cpp Examining data/libpagemaker-0.0.4/src/conv/text/pmd2text.cpp Examining data/libpagemaker-0.0.4/src/conv/svg/pmd2svg.cpp Examining data/libpagemaker-0.0.4/inc/libpagemaker/libpagemaker.h Examining data/libpagemaker-0.0.4/inc/libpagemaker/PMDocument.h FINAL RESULTS: data/libpagemaker-0.0.4/src/conv/raw/pmd2raw.cpp:51:3: [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. printf(TOOL " " VERSION "\n"); data/libpagemaker-0.0.4/src/conv/svg/pmd2svg.cpp:48:3: [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. printf(TOOL " " VERSION "\n"); data/libpagemaker-0.0.4/src/conv/text/pmd2text.cpp:50:3: [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. printf(TOOL " " VERSION "\n"); data/libpagemaker-0.0.4/src/lib/PMDCollector.cpp:94:10: [4] (format) sprintf: Potential format string problem (CWE-134). Make format string constant. border.sprintf("%fpt", stroke.m_strokeWidth / 5.0); data/libpagemaker-0.0.4/src/lib/PMDCollector.cpp:123:14: [4] (format) sprintf: Potential format string problem (CWE-134). Make format string constant. colorStr.sprintf("#%.2x%.2x%.2x", color.m_red, color.m_green, color.m_blue); data/libpagemaker-0.0.4/src/lib/PMDCollector.cpp:213:27: [4] (format) sprintf: Potential format string problem (CWE-134). Make format string constant. tempFillColorString.sprintf("#%.2x%.2x%.2x", tempFillColor.m_red,tempFillColor.m_green,tempFillColor.m_blue); data/libpagemaker-0.0.4/src/lib/PMDCollector.cpp:244:29: [4] (format) sprintf: Potential format string problem (CWE-134). Make format string constant. tempStrokeColorString.sprintf("#%.2x%.2x%.2x", tempStrokeColor.m_red,tempStrokeColor.m_green,tempStrokeColor.m_blue); data/libpagemaker-0.0.4/src/lib/PMDCollector.cpp:411:29: [4] (format) sprintf: Potential format string problem (CWE-134). Make format string constant. tempColorString.sprintf("#%.2x%.2x%.2x",(uint16_t)(tempColor.m_red * charTint + temp_bgcolor),(uint16_t)(tempColor.m_green * charTint + temp_bgcolor),(uint16_t)(tempColor.m_blue * charTint + temp_bgcolor)); data/libpagemaker-0.0.4/src/lib/PMDCollector.cpp:436:17: [4] (format) sprintf: Potential format string problem (CWE-134). Make format string constant. pos.sprintf("%.1f%% %.1f%%", intPos / 10.0, charProperty.m_superSubSize / 10.0); data/libpagemaker-0.0.4/src/lib/PMDCollector.cpp:574:29: [4] (format) sprintf: Potential format string problem (CWE-134). Make format string constant. tempFillColorString.sprintf("#%.2x%.2x%.2x", tempFillColor.m_red,tempFillColor.m_green,tempFillColor.m_blue); data/libpagemaker-0.0.4/src/lib/PMDCollector.cpp:605:31: [4] (format) sprintf: Potential format string problem (CWE-134). Make format string constant. tempStrokeColorString.sprintf("#%.2x%.2x%.2x", tempStrokeColor.m_red,tempStrokeColor.m_green,tempStrokeColor.m_blue); data/libpagemaker-0.0.4/src/lib/libpagemaker_utils.cpp:36:8: [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. std::vfprintf(stderr, format, args); data/libpagemaker-0.0.4/src/lib/libpagemaker_utils.h:53:102: [4] (format) fprintf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. #define PMD_WARN_MSG(M) std::fprintf(stderr, "PageMaker [WARN] %15s:%d: ", __FILE__, __LINE__); std::fprintf(stderr, M) data/libpagemaker-0.0.4/src/lib/libpagemaker_utils.h:54:102: [4] (format) fprintf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. #define PMD_ERR_MSG(M) std::fprintf(stderr, "PageMaker [ERROR] %15s:%d: ", __FILE__, __LINE__); std::fprintf(stderr, M) data/libpagemaker-0.0.4/src/lib/PMDParser.cpp:104:8: [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. bool equal(const RecordIterator &other) const; data/libpagemaker-0.0.4/src/lib/PMDParser.cpp:166:33: [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. bool PMDParser::RecordIterator::equal(const RecordIterator &other) const data/libpagemaker-0.0.4/src/lib/libpagemaker_utils.cpp:46:29: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). uint8_t const *p = input->read(sizeof(uint8_t), numBytesRead); data/libpagemaker-0.0.4/src/lib/libpagemaker_utils.cpp:63:29: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). uint8_t const *p = input->read(sizeof(uint16_t), numBytesRead); data/libpagemaker-0.0.4/src/lib/libpagemaker_utils.cpp:84:29: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). uint8_t const *p = input->read(sizeof(uint32_t), numBytesRead); data/libpagemaker-0.0.4/src/lib/libpagemaker_utils.cpp:105:29: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). uint8_t const *p = input->read(sizeof(uint64_t), numBytesRead); data/libpagemaker-0.0.4/src/lib/libpagemaker_utils.cpp:126:41: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). const unsigned char *const s = input->read(numBytes, readBytes); ANALYSIS SUMMARY: Hits = 21 Lines analyzed = 4396 in approximately 0.16 seconds (28014 lines/second) Physical Source Lines of Code (SLOC) = 3350 Hits@level = [0] 32 [1] 7 [2] 0 [3] 0 [4] 14 [5] 0 Hits@level+ = [0+] 53 [1+] 21 [2+] 14 [3+] 14 [4+] 14 [5+] 0 Hits/KSLOC@level+ = [0+] 15.8209 [1+] 6.26866 [2+] 4.1791 [3+] 4.1791 [4+] 4.1791 [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.