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/libe-book-0.1.3/inc/libe-book/EBOOKDocument.h
Examining data/libe-book-0.1.3/inc/libe-book/libe-book.h
Examining data/libe-book-0.1.3/src/lib/SoftBookLZSSStream.h
Examining data/libe-book-0.1.3/src/lib/PeanutPressTypes.cpp
Examining data/libe-book-0.1.3/src/lib/XMLCollector.h
Examining data/libe-book-0.1.3/src/lib/EBOOKCharsetConverter.h
Examining data/libe-book-0.1.3/src/lib/BBeBMetadataParser.h
Examining data/libe-book-0.1.3/src/lib/libebook_xml.h
Examining data/libe-book-0.1.3/src/lib/HTMLHelpStream.h
Examining data/libe-book-0.1.3/src/lib/PalmDocParser.h
Examining data/libe-book-0.1.3/src/lib/EBOOKSubDocument.cpp
Examining data/libe-book-0.1.3/src/lib/SoftBookText.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKHTMLParser.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKXMLContext.h
Examining data/libe-book-0.1.3/src/lib/SoftBookLZSSStream.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKHTMLToken.cpp
Examining data/libe-book-0.1.3/src/lib/SoftBookCollector.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2TextContext.h
Examining data/libe-book-0.1.3/src/lib/PDBLZ77Stream.cpp
Examining data/libe-book-0.1.3/src/lib/libebook_libcss.cpp
Examining data/libe-book-0.1.3/src/lib/PDBLZ77Stream.h
Examining data/libe-book-0.1.3/src/lib/EBOOKBitStream.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2TextContext.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKHTMLParser.h
Examining data/libe-book-0.1.3/src/lib/EPubToken.h
Examining data/libe-book-0.1.3/src/lib/EBOOKXMLContext.cpp
Examining data/libe-book-0.1.3/src/lib/libebook_libcss.h
Examining data/libe-book-0.1.3/src/lib/libebook_xml.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKOPFToken.h
Examining data/libe-book-0.1.3/src/lib/libebook_hubbub.cpp
Examining data/libe-book-0.1.3/src/lib/BBeBParser.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKXMLParser.h
Examining data/libe-book-0.1.3/src/lib/EBOOKLanguageManager.h
Examining data/libe-book-0.1.3/src/lib/PalmDocParser.cpp
Examining data/libe-book-0.1.3/src/lib/ZTXTParser.h
Examining data/libe-book-0.1.3/src/lib/HTMLParser.h
Examining data/libe-book-0.1.3/src/lib/XMLTreeWalker.h
Examining data/libe-book-0.1.3/src/lib/RocketEBookToken.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2Collector.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook3Token.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKTokenizer.h
Examining data/libe-book-0.1.3/src/lib/SoftBookCollector.h
Examining data/libe-book-0.1.3/src/lib/FictionBook2MetadataCollector.h
Examining data/libe-book-0.1.3/src/lib/EBOOKXMLContextBase.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKTokenizer.cpp
Examining data/libe-book-0.1.3/src/lib/LITParser.h
Examining data/libe-book-0.1.3/src/lib/FictionBook2BlockContext.h
Examining data/libe-book-0.1.3/src/lib/EBOOKSAXParser.cpp
Examining data/libe-book-0.1.3/src/lib/QiOOParser.cpp
Examining data/libe-book-0.1.3/src/lib/SoftBookHeader.h
Examining data/libe-book-0.1.3/src/lib/PluckerParser.cpp
Examining data/libe-book-0.1.3/src/lib/TCRParser.h
Examining data/libe-book-0.1.3/src/lib/FictionBook2MetadataContext.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKBitStream.h
Examining data/libe-book-0.1.3/src/lib/BBeBParser.h
Examining data/libe-book-0.1.3/src/lib/HTMLHelpParser.h
Examining data/libe-book-0.1.3/src/lib/TealDocParser.h
Examining data/libe-book-0.1.3/src/lib/BBeBTypes.cpp
Examining data/libe-book-0.1.3/src/lib/SoftBookTypes.h
Examining data/libe-book-0.1.3/src/lib/RocketEBookHeader.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2TableContext.h
Examining data/libe-book-0.1.3/src/lib/FictionBook3Parser.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKStreamView.cpp
Examining data/libe-book-0.1.3/src/lib/OpenEBookParser.h
Examining data/libe-book-0.1.3/src/lib/EBOOKZlibStream.h
Examining data/libe-book-0.1.3/src/lib/BBeBCollector.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKXMLParser.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2ParserContext.h
Examining data/libe-book-0.1.3/src/lib/EBOOKOutputElements.cpp
Examining data/libe-book-0.1.3/src/lib/ZVRParser.h
Examining data/libe-book-0.1.3/src/lib/libebook_utils.h
Examining data/libe-book-0.1.3/src/lib/BBeBMetadataParser.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKXMLContextBase.h
Examining data/libe-book-0.1.3/src/lib/SoftBookParser.h
Examining data/libe-book-0.1.3/src/lib/EBOOKOPFParser.h
Examining data/libe-book-0.1.3/src/lib/PDBParser.h
Examining data/libe-book-0.1.3/src/lib/EBOOKUTF8Stream.cpp
Examining data/libe-book-0.1.3/src/lib/OpenEBookParser.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKStreamView.h
Examining data/libe-book-0.1.3/src/lib/EBOOKSAXParser.h
Examining data/libe-book-0.1.3/src/lib/LITParser.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook3Parser.h
Examining data/libe-book-0.1.3/src/lib/ZVRParser.cpp
Examining data/libe-book-0.1.3/src/lib/PeanutPressParser.h
Examining data/libe-book-0.1.3/src/lib/SoftBookHeader.cpp
Examining data/libe-book-0.1.3/src/lib/RocketEBookParser.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2ExtrasCollector.cpp
Examining data/libe-book-0.1.3/src/lib/TCRParser.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2TableContext.cpp
Examining data/libe-book-0.1.3/src/lib/SoftBookResourceDir.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKHTMLToken.h
Examining data/libe-book-0.1.3/src/lib/RocketEBookHeader.h
Examining data/libe-book-0.1.3/src/lib/LITStream.h
Examining data/libe-book-0.1.3/src/lib/EBOOKToken.h
Examining data/libe-book-0.1.3/src/lib/BBeBCollector.h
Examining data/libe-book-0.1.3/src/lib/FictionBook2MetadataCollector.cpp
Examining data/libe-book-0.1.3/src/lib/RocketEBookToken.h
Examining data/libe-book-0.1.3/src/lib/FictionBook3Token.h
Examining data/libe-book-0.1.3/src/lib/FictionBook2XMLParserContext.h
Examining data/libe-book-0.1.3/src/lib/SoftBookTypes.cpp
Examining data/libe-book-0.1.3/src/lib/MobiPocketParser.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2ContentCollector.h
Examining data/libe-book-0.1.3/src/lib/RocketEBookStream.cpp
Examining data/libe-book-0.1.3/src/lib/XMLTreeNode.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2ExtrasCollector.h
Examining data/libe-book-0.1.3/src/lib/libebook_utils.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKMemoryStream.h
Examining data/libe-book-0.1.3/src/lib/EBOOKHTMLTypes.cpp
Examining data/libe-book-0.1.3/src/lib/XMLStylesheet.cpp
Examining data/libe-book-0.1.3/src/lib/PeanutPressParser.cpp
Examining data/libe-book-0.1.3/src/lib/PluckerParser.h
Examining data/libe-book-0.1.3/src/lib/EBOOKUTF8Stream.h
Examining data/libe-book-0.1.3/src/lib/EPubParser.h
Examining data/libe-book-0.1.3/src/lib/PeanutPressTypes.h
Examining data/libe-book-0.1.3/src/lib/HTMLHelpParser.cpp
Examining data/libe-book-0.1.3/src/lib/XMLCollector.cpp
Examining data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKMemoryStream.cpp
Examining data/libe-book-0.1.3/src/lib/TealDocParser.cpp
Examining data/libe-book-0.1.3/src/lib/RocketEBookParser.h
Examining data/libe-book-0.1.3/src/lib/FictionBook2ParserContext.cpp
Examining data/libe-book-0.1.3/src/lib/EPubToken.cpp
Examining data/libe-book-0.1.3/src/lib/LITStream.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2Style.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2Parser.h
Examining data/libe-book-0.1.3/src/lib/MobiPocketParser.h
Examining data/libe-book-0.1.3/src/lib/ZTXTParser.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2Token.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2Token.h
Examining data/libe-book-0.1.3/src/lib/EBOOKOPFToken.cpp
Examining data/libe-book-0.1.3/src/lib/SoftBookResourceDir.h
Examining data/libe-book-0.1.3/src/lib/FictionBook2Style.h
Examining data/libe-book-0.1.3/src/lib/SoftBookParser.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKZlibStream.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKSubDocument.h
Examining data/libe-book-0.1.3/src/lib/FictionBook2Parser.cpp
Examining data/libe-book-0.1.3/src/lib/EBOOKOPFParser.cpp
Examining data/libe-book-0.1.3/src/lib/EPubParser.cpp
Examining data/libe-book-0.1.3/src/lib/XMLTreeNode.h
Examining data/libe-book-0.1.3/src/lib/BBeBTypes.h
Examining data/libe-book-0.1.3/src/lib/XMLStylesheet.h
Examining data/libe-book-0.1.3/src/lib/QiOOParser.h
Examining data/libe-book-0.1.3/src/lib/EBOOKDocument.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2BinaryContext.h
Examining data/libe-book-0.1.3/src/lib/FictionBook2BlockContext.cpp
Examining data/libe-book-0.1.3/src/lib/HTMLParser.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2ContentCollector.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2BinaryContext.cpp
Examining data/libe-book-0.1.3/src/lib/XMLTreeWalker.cpp
Examining data/libe-book-0.1.3/src/lib/SoftBookText.h
Examining data/libe-book-0.1.3/src/lib/EBOOKHTMLTypes.h
Examining data/libe-book-0.1.3/src/lib/libebook_hubbub.h
Examining data/libe-book-0.1.3/src/lib/EBOOKOutputElements.h
Examining data/libe-book-0.1.3/src/lib/EBOOKLanguageManager.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2XMLParserContext.cpp
Examining data/libe-book-0.1.3/src/lib/RocketEBookStream.h
Examining data/libe-book-0.1.3/src/lib/PDBParser.cpp
Examining data/libe-book-0.1.3/src/lib/FictionBook2Collector.h
Examining data/libe-book-0.1.3/src/lib/FictionBook2MetadataContext.h
Examining data/libe-book-0.1.3/src/lib/EBOOKCharsetConverter.cpp
Examining data/libe-book-0.1.3/src/test/test.cpp
Examining data/libe-book-0.1.3/src/test/EBOOKMemoryStreamTest.cpp
Examining data/libe-book-0.1.3/src/test/EBOOKLanguageManagerTest.cpp
Examining data/libe-book-0.1.3/src/test/PDBLZ77StreamTest.cpp
Examining data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp
Examining data/libe-book-0.1.3/src/test/SoftBookLZSSStreamTest.cpp
Examining data/libe-book-0.1.3/src/test/XMLTreeWalkerTest.cpp
Examining data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp
Examining data/libe-book-0.1.3/src/fuzz/lrffuzzer.cpp
Examining data/libe-book-0.1.3/src/fuzz/pdbfuzzer.cpp
Examining data/libe-book-0.1.3/src/conv/text/ebook2text.cpp
Examining data/libe-book-0.1.3/src/conv/raw/ebook2raw.cpp
Examining data/libe-book-0.1.3/src/conv/html/ebook2html.cpp

FINAL RESULTS:

data/libe-book-0.1.3/src/lib/BBeBCollector.cpp:63:7:  [4] (format) sprintf:
  Potential format string problem (CWE-134). Make format string constant.
  str.sprintf("#%02x%02x%02x", color.r, color.g, color.b);
data/libe-book-0.1.3/src/lib/FictionBook2ContentCollector.cpp:74:10:  [4] (format) sprintf:
  Potential format string problem (CWE-134). Make format string constant.
    name.sprintf("FictionBook2 Heading %u", unsigned(format.headingLevel));
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:78:21:  [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.
  MSPackSystemData *system;
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:105:5:  [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.
  : system(sys)
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:110:16:  [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.
  assert(this->system);
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:114:5:  [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.
  : system(sys)
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:119:16:  [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.
  assert(this->system);
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:384:16:  [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.
  MSPackSystem system;
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:409:5:  [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.
  , system()
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:442:34:  [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.
  FileMap_t::const_iterator it = system.data->fileMap.find(file->filename);
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:443:7:  [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.
  if (system.data->fileMap.end() == it)
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:462:35:  [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.
    mspack_system &base = m_impl->system.base;
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:476: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.
  m_impl->system.data = new MSPackSystemData(stream);
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:478:73:  [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.
  mspack_system *const sys = reinterpret_cast<mspack_system *>(&m_impl->system);
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:484:20:  [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.
    delete m_impl->system.data;
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:493:18:  [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.
  delete m_impl->system.data;
data/libe-book-0.1.3/src/lib/libebook_utils.cpp:40: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/libe-book-0.1.3/src/lib/libebook_utils.h:29:64:  [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 EBOOK_ATTRIBUTE_PRINTF(fmt, arg) __attribute__((format(printf, fmt, arg)))
data/libe-book-0.1.3/src/lib/FictionBook2TableContext.cpp:213:27:  [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).
      m_columnSpan = std::atoi(value);
data/libe-book-0.1.3/src/lib/FictionBook2TableContext.cpp:216:24:  [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).
      m_rowSpan = std::atoi(value);
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:211:10:  [2] (buffer) memcpy:
  Does not check for buffer overflows when copying to destination (CWE-120).
  Make sure destination can always hold the source data.
    std::memcpy(buffer, data, bytes);
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:286:10:  [2] (buffer) memcpy:
  Does not check for buffer overflows when copying to destination (CWE-120).
  Make sure destination can always hold the source data.
    std::memcpy(dest, src, bytes);
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:480:42:  [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_impl->header = m_impl->decompressor->open(m_impl->decompressor.get(), "/");
data/libe-book-0.1.3/src/lib/PDBParser.cpp:196: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 name[32];
data/libe-book-0.1.3/src/lib/XMLCollector.cpp:134:8:  [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/libe-book-0.1.3/src/lib/XMLCollector.cpp:410:5:  [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/libe-book-0.1.3/src/lib/XMLCollector.cpp:417:5:  [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/libe-book-0.1.3/src/lib/XMLCollector.cpp:424:5:  [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/libe-book-0.1.3/src/lib/XMLCollector.cpp:431:5:  [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/libe-book-0.1.3/src/lib/XMLCollector.cpp:438:5:  [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/libe-book-0.1.3/src/lib/XMLCollector.cpp:445:5:  [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/libe-book-0.1.3/src/lib/XMLCollector.cpp:454:5:  [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/libe-book-0.1.3/src/lib/XMLCollector.cpp:460:21:  [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 OutputHandler::open()
data/libe-book-0.1.3/src/lib/XMLCollector.cpp:467: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).
      m_parent->open();
data/libe-book-0.1.3/src/lib/XMLCollector.cpp:1190:10:  [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).
  assert(open);
data/libe-book-0.1.3/src/lib/XMLCollector.cpp:1193:39:  [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).
    (data->getCurrentOutput().get()->*open)(*data->currentProps);
data/libe-book-0.1.3/src/lib/XMLCollector.cpp:1195:39:  [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).
    (data->getCurrentOutput().get()->*open)(RVNGPropertyList());
data/libe-book-0.1.3/src/lib/libebook_xml.cpp:33:12:  [2] (buffer) memcpy:
  Does not check for buffer overflows when copying to destination (CWE-120).
  Make sure destination can always hold the source data.
      std::memcpy(buffer, bytes, size_t(bytesRead));
data/libe-book-0.1.3/src/lib/BBeBParser.cpp:303:35:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  const unsigned char *s = input->read(sizeof(signature), readBytes);
data/libe-book-0.1.3/src/lib/BBeBParser.cpp:304:51:  [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 (sizeof(signature) == readBytes) && std::equal(signature, signature + sizeof(signature), s);
data/libe-book-0.1.3/src/lib/BBeBParser.cpp:397:13:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  if (entry.read)
data/libe-book-0.1.3/src/lib/BBeBParser.cpp:1616:52:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  return (m_objectIndex.end() != it) && it->second.read;
data/libe-book-0.1.3/src/lib/BBeBParser.h:67:10:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    bool read;
data/libe-book-0.1.3/src/lib/EBOOKBitStream.cpp:28:26:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
uint32_t EBOOKBitStream::read(uint8_t numberOfBits, const bool bigEndian)
data/libe-book-0.1.3/src/lib/EBOOKBitStream.h:24:12:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  uint32_t read(uint8_t numberOfBits, bool bigEndian = false);
data/libe-book-0.1.3/src/lib/EBOOKDocument.cpp:55:12:  [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.
using std::equal;
data/libe-book-0.1.3/src/lib/EBOOKDocument.cpp:84:7:  [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.
  if (equal(BOM_UTF8, BOM_UTF8 + EBOOK_NUM_ELEMENTS(BOM_UTF8) - 1, bom))
data/libe-book-0.1.3/src/lib/EBOOKDocument.cpp:86:12:  [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.
  else if (equal(BOM_UTF16BE, BOM_UTF16BE + EBOOK_NUM_ELEMENTS(BOM_UTF16BE) - 1, bom))
data/libe-book-0.1.3/src/lib/EBOOKDocument.cpp:88:12:  [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.
  else if (equal(BOM_UTF16LE, BOM_UTF16LE + EBOOK_NUM_ELEMENTS(BOM_UTF16LE) - 1, bom))
data/libe-book-0.1.3/src/lib/EBOOKDocument.cpp:122:9:  [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.
  xml = equal(decl, decl + len, data);
data/libe-book-0.1.3/src/lib/EBOOKHTMLParser.cpp:283:38:  [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 (lhs.size() == rhs.len) && (equal(lhs.begin(), lhs.end(), char_cast(rhs.ptr)));
data/libe-book-0.1.3/src/lib/EBOOKHTMLParser.cpp:710:19:  [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).
    if (6 == std::strlen(c) && (string::npos == string(c).find_first_not_of("0-9a-fA-F")))
data/libe-book-0.1.3/src/lib/EBOOKHTMLToken.cpp:30:33:  [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).
    return getHTMLTokenId(name, strlen(name), ns, strlen(ns));
data/libe-book-0.1.3/src/lib/EBOOKHTMLToken.cpp:30:51:  [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).
    return getHTMLTokenId(name, strlen(name), ns, strlen(ns));
data/libe-book-0.1.3/src/lib/EBOOKHTMLToken.cpp:31:31:  [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).
  return getHTMLTokenId(name, strlen(name));
data/libe-book-0.1.3/src/lib/EBOOKMemoryStream.cpp:70:41:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
const unsigned char *EBOOKMemoryStream::read(unsigned long numBytes, unsigned long &numBytesRead) try
data/libe-book-0.1.3/src/lib/EBOOKMemoryStream.h:38:24:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead) override;
data/libe-book-0.1.3/src/lib/EBOOKOPFToken.cpp:30:32:  [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).
    return getOPFTokenId(name, strlen(name), ns, strlen(ns));
data/libe-book-0.1.3/src/lib/EBOOKOPFToken.cpp:30:50:  [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).
    return getOPFTokenId(name, strlen(name), ns, strlen(ns));
data/libe-book-0.1.3/src/lib/EBOOKOPFToken.cpp:31:30:  [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).
  return getOPFTokenId(name, strlen(name));
data/libe-book-0.1.3/src/lib/EBOOKStreamView.cpp:66:39:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
const unsigned char *EBOOKStreamView::read(unsigned long numBytes, unsigned long &numBytesRead)
data/libe-book-0.1.3/src/lib/EBOOKStreamView.cpp:80:20:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  return m_stream->read(numBytes, numBytesRead);
data/libe-book-0.1.3/src/lib/EBOOKStreamView.h:42:24:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead) override;
data/libe-book-0.1.3/src/lib/EBOOKUTF8Stream.cpp:110:39:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
const unsigned char *EBOOKUTF8Stream::read(unsigned long numBytes, unsigned long &numBytesRead)
data/libe-book-0.1.3/src/lib/EBOOKUTF8Stream.cpp:112:20:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  return m_stream->read(numBytes, numBytesRead);
data/libe-book-0.1.3/src/lib/EBOOKUTF8Stream.h:35:24:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead) override;
data/libe-book-0.1.3/src/lib/EBOOKZlibStream.cpp:48:61:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  auto *compressedData = const_cast<unsigned char *>(input->read(compressedSize, numBytesRead));
data/libe-book-0.1.3/src/lib/EBOOKZlibStream.cpp:149:39:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
const unsigned char *EBOOKZlibStream::read(const unsigned long numBytes, unsigned long &numBytesRead)
data/libe-book-0.1.3/src/lib/EBOOKZlibStream.cpp:151:20:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  return m_stream->read(numBytes, numBytesRead);
data/libe-book-0.1.3/src/lib/EBOOKZlibStream.h:33:24:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead) override;
data/libe-book-0.1.3/src/lib/EPubToken.cpp:30:33:  [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).
    return getEPubTokenId(name, strlen(name), ns, strlen(ns));
data/libe-book-0.1.3/src/lib/EPubToken.cpp:30:51:  [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).
    return getEPubTokenId(name, strlen(name), ns, strlen(ns));
data/libe-book-0.1.3/src/lib/EPubToken.cpp:31:31:  [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).
  return getEPubTokenId(name, strlen(name));
data/libe-book-0.1.3/src/lib/FictionBook2Token.cpp:14:12:  [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).
using std::strlen;
data/libe-book-0.1.3/src/lib/FictionBook2Token.cpp:40:47:  [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).
  return getFictionBook2Token(str, (unsigned) strlen(str));
data/libe-book-0.1.3/src/lib/FictionBook2Token.cpp:69:49:  [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).
  return getFictionBook2TokenID(str, (unsigned) strlen(str));
data/libe-book-0.1.3/src/lib/FictionBook2Token.cpp:94:51:  [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).
  return getFictionBook2TokenName(str, (unsigned) strlen(str));
data/libe-book-0.1.3/src/lib/FictionBook3Token.cpp:17:12:  [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).
using std::strlen;
data/libe-book-0.1.3/src/lib/FictionBook3Token.cpp:52:25:  [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).
  const size_t length = strlen(name);
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:206:59:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    const unsigned char *const data = that->data->stream->read(bytesToRead, numRead);
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:580:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
const unsigned char *HTMLHelpStream::read(const unsigned long numBytes, unsigned long &numBytesRead)
data/libe-book-0.1.3/src/lib/HTMLHelpStream.cpp:582:26:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  return m_impl->stream->read(numBytes, numBytesRead);
data/libe-book-0.1.3/src/lib/HTMLHelpStream.h:39:32:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  virtual const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead);
data/libe-book-0.1.3/src/lib/LITStream.cpp:77:33:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
const unsigned char *LITStream::read(const unsigned long numBytes, unsigned long &numBytesRead)
data/libe-book-0.1.3/src/lib/LITStream.cpp:79:26:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  return m_impl->stream->read(numBytes, numBytesRead);
data/libe-book-0.1.3/src/lib/LITStream.h:39:32:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  virtual const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead);
data/libe-book-0.1.3/src/lib/PDBLZ77Stream.cpp:139:37:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
const unsigned char *PDBLZ77Stream::read(const unsigned long numBytes, unsigned long &numBytesRead)
data/libe-book-0.1.3/src/lib/PDBLZ77Stream.cpp:141:20:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  return m_stream->read(numBytes, numBytesRead);
data/libe-book-0.1.3/src/lib/PDBLZ77Stream.h:37:24:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead) override;
data/libe-book-0.1.3/src/lib/PalmDocParser.cpp:114:58:  [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).
      std::vector<char> name(getName(), getName() + std::strlen(getName()));
data/libe-book-0.1.3/src/lib/PalmDocParser.cpp:144:65:  [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).
    if (m_converter->convertBytes(getName(), (unsigned int)std::strlen(getName()), nameUtf8) && !nameUtf8.empty())
data/libe-book-0.1.3/src/lib/PeanutPressParser.cpp:68:24:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead) override;
data/libe-book-0.1.3/src/lib/PeanutPressParser.cpp:117:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  const unsigned char *bytes = strm->read((unsigned long) end, numBytesRead);
data/libe-book-0.1.3/src/lib/PeanutPressParser.cpp:159:33:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
const unsigned char *XorStream::read(unsigned long numBytes, unsigned long &numBytesRead)
data/libe-book-0.1.3/src/lib/PeanutPressParser.cpp:161:20:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  return m_stream->read(numBytes, numBytesRead);
data/libe-book-0.1.3/src/lib/RocketEBookStream.cpp:158:41:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
const unsigned char *RocketEBookStream::read(const unsigned long numBytes, unsigned long &numBytesRead)
data/libe-book-0.1.3/src/lib/RocketEBookStream.cpp:160:26:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  return m_impl->stream->read(numBytes, numBytesRead);
data/libe-book-0.1.3/src/lib/RocketEBookStream.h:41:32:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  virtual const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead);
data/libe-book-0.1.3/src/lib/RocketEBookToken.cpp:30: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).
    return getRocketEBookTokenId(name, strlen(name), ns, strlen(ns));
data/libe-book-0.1.3/src/lib/RocketEBookToken.cpp:30:58:  [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).
    return getRocketEBookTokenId(name, strlen(name), ns, strlen(ns));
data/libe-book-0.1.3/src/lib/RocketEBookToken.cpp:31:38:  [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).
  return getRocketEBookTokenId(name, strlen(name));
data/libe-book-0.1.3/src/lib/SoftBookHeader.cpp:116:21:  [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.
  checkOrThrow(std::equal(signature, signature + 8, SOFTBOOK_SIGNATURE));
data/libe-book-0.1.3/src/lib/SoftBookLZSSStream.cpp:151:41:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    const bool encoded = 0 == bitStream.read(1, bigEndian);
data/libe-book-0.1.3/src/lib/SoftBookLZSSStream.cpp:154:41:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
      const uint32_t offset = bitStream.read((uint8_t) configuration.offsetBits, bigEndian);
data/libe-book-0.1.3/src/lib/SoftBookLZSSStream.cpp:155:41:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
      const uint32_t length = bitStream.read((uint8_t) configuration.lengthBits, bigEndian) + 3;
data/libe-book-0.1.3/src/lib/SoftBookLZSSStream.cpp:160:59:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
      const auto c = static_cast<unsigned char>(bitStream.read(8, bigEndian));
data/libe-book-0.1.3/src/lib/SoftBookLZSSStream.cpp:228:42:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
const unsigned char *SoftBookLZSSStream::read(const unsigned long numBytes, unsigned long &numBytesRead)
data/libe-book-0.1.3/src/lib/SoftBookLZSSStream.cpp:230:20:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  return m_stream->read(numBytes, numBytesRead);
data/libe-book-0.1.3/src/lib/SoftBookLZSSStream.h:51:24:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead) override;
data/libe-book-0.1.3/src/lib/SoftBookParser.cpp:123:13:  [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.
  if (!std::equal(name, name + 4, type))
data/libe-book-0.1.3/src/lib/SoftBookResourceDir.cpp:45:24:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead) override;
data/libe-book-0.1.3/src/lib/SoftBookResourceDir.cpp:177:48:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
const unsigned char *ResourceStream<Selector>::read(const unsigned long numBytes, unsigned long &numBytesRead)
data/libe-book-0.1.3/src/lib/SoftBookResourceDir.cpp:179:20:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  return m_stream->read(numBytes, numBytesRead);
data/libe-book-0.1.3/src/lib/TCRParser.cpp:43:13:  [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.
  if (!std::equal(sig, sig + length, TCR_SIGNATURE))
data/libe-book-0.1.3/src/lib/TealDocParser.cpp:655:65:  [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).
    if (m_converter->convertBytes(getName(), (unsigned int)std::strlen(getName()), nameUtf8) && !nameUtf8.empty())
data/libe-book-0.1.3/src/lib/XMLTreeWalker.cpp:44:53:  [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 (lhs.size() == lwc_string_length(rhs)) && (equal(lhs.begin(), lhs.end(), lwc_string_data(rhs)));
data/libe-book-0.1.3/src/lib/ZVRParser.cpp:41:13:  [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.
  if (!std::equal(sig, sig + length, ZVR_SIGNATURE))
data/libe-book-0.1.3/src/lib/libebook_utils.cpp:50: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/libe-book-0.1.3/src/lib/libebook_utils.cpp:62: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/libe-book-0.1.3/src/lib/libebook_utils.cpp:78: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/libe-book-0.1.3/src/lib/libebook_utils.cpp:94: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/libe-book-0.1.3/src/lib/libebook_utils.cpp:110: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);
data/libe-book-0.1.3/src/lib/libebook_xml.cpp:28:49:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
      const unsigned char *const bytes = input->read((unsigned long) len, bytesRead);
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:109:45:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(0x8ee3u, bitStream.read(16));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:110:45:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(0xe338u, bitStream.read(16));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:122:45:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(0xe38eu, bitStream.read(16, true));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:123:45:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(0x38e3u, bitStream.read(16, true));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:137:49:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(0xe3388ee3u, bitStream.read(32));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:149:49:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(0xe38e38e3u, bitStream.read(32, true));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:170:44:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(0x2e3u, bitStream.read(10));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:171:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(2));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:172:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:173:44:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(0x1c7u, bitStream.read(12));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:174:43:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(0x31u, bitStream.read(6));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:175:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:187:44:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(0x38eu, bitStream.read(10, true));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:188:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(2, true));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:189:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, true));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:190:44:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(0xc71u, bitStream.read(12, true));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:191:43:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(0x31u, bitStream.read(6, true));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:192:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, true));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:205:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:206:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:207:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:208:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:209:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:210:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:211:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:212:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:213:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:214:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:215:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:216:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:217:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:218:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:219:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:220:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:221:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:222:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:223:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:224:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:225:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:226:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:227:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:228:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:229:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:230:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:231:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:232:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:233:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:234:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:235:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:236:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:248:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(7u, bitStream.read(3, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:249:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(3, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:250:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(7u, bitStream.read(3, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:251:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(3, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:252:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(7u, bitStream.read(3, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:253:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(3, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:254:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(7u, bitStream.read(3, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:255:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(3, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:256:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(7u, bitStream.read(3, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:257:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(3, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:259:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(3u, bitStream.read(2, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:271:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0xeu, bitStream.read(4, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:272:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0x3u, bitStream.read(4, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:273:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0x8u, bitStream.read(4, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:274:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0xeu, bitStream.read(4, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:275:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0x3u, bitStream.read(4, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:276:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0x8u, bitStream.read(4, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:277:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0xeu, bitStream.read(4, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:278:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0x3u, bitStream.read(4, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:290:41:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0xe3u, bitStream.read(8, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:291:41:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0x8eu, bitStream.read(8, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:292:41:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0x38u, bitStream.read(8, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:293:41:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0xe3u, bitStream.read(8, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:305:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(1u, bitStream.read(1, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:306:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(3u, bitStream.read(2, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:307:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0u, bitStream.read(3, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:308:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0xeu, bitStream.read(4, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:309:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(7u, bitStream.read(5, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:310:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(7u, bitStream.read(6, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:311:40:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(0xeu, bitStream.read(7, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:313:38:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  CPPUNIT_ASSERT_EQUAL(3u, bitStream.read(4, bigEndian));
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:325:13:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  bitStream.read(23);
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:327:13:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  bitStream.read(1);
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:330:13:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  bitStream.read(1);
data/libe-book-0.1.3/src/test/EBOOKBitStreamTest.cpp:333:13:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  bitStream.read(7);
data/libe-book-0.1.3/src/test/EBOOKMemoryStreamTest.cpp:59:35:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    const unsigned char *s = strm.read(1, readBytes);
data/libe-book-0.1.3/src/test/EBOOKMemoryStreamTest.cpp:71:33:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
  const unsigned char *s = strm.read(sizeof(data), readBytes);
data/libe-book-0.1.3/src/test/EBOOKMemoryStreamTest.cpp:73:23:  [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.
  CPPUNIT_ASSERT(std::equal(data, data + sizeof(data), s));
data/libe-book-0.1.3/src/test/PDBLZ77StreamTest.cpp:57:37:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
    const unsigned char *s = stream.read(1, readBytes);
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:604:6:  [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 Callback *const expected, const size_t len, const RawGenerator::CallList_t &received)
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:606:43:  [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 (len == received.size()) && std::equal(received.begin(), received.end(), expected);
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:652:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:669:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:695:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:719:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:742:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:771:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:799:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:828:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:844:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:858:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:893:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:914:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:935:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:957:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:994:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:1017:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:1040:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));
data/libe-book-0.1.3/src/test/XMLCollectorTest.cpp:1064:28:  [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.
                           equal(expected, EBOOK_NUM_ELEMENTS(expected), generator.getCallList()));

ANALYSIS SUMMARY:

Hits = 232
Lines analyzed = 33512 in approximately 0.64 seconds (52640 lines/second)
Physical Source Lines of Code (SLOC) = 24918
Hits@level = [0]  40 [1] 194 [2]  20 [3]   0 [4]  18 [5]   0
Hits@level+ = [0+] 272 [1+] 232 [2+]  38 [3+]  18 [4+]  18 [5+]   0
Hits/KSLOC@level+ = [0+] 10.9158 [1+] 9.31054 [2+] 1.525 [3+] 0.722369 [4+] 0.722369 [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.