diff options
author | Ryan Long <ryan.long@oarcorp.com> | 2021-08-17 10:11:48 -0400 |
---|---|---|
committer | Joel Sherrill <joel@rtems.org> | 2021-08-20 12:47:02 -0500 |
commit | 0ab060ff2c52159d2fd7aba7ea58454ee7491973 (patch) | |
tree | e156af205ff467f999c18543d0f1ab67cc46273c /tester/covoar/GcovData.cc | |
parent | ReportsText.cc: Add ostream_guard (diff) | |
download | rtems-tools-0ab060ff2c52159d2fd7aba7ea58454ee7491973.tar.bz2 |
GcovData.cc: Fix out-of-bounds access errors
Adjusted number of bytes to be read, removed length variable
CID 1506208: Out-of-bounds access
CID 1506209: Out-of-bounds access
Closes #4485
Diffstat (limited to 'tester/covoar/GcovData.cc')
-rw-r--r-- | tester/covoar/GcovData.cc | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/tester/covoar/GcovData.cc b/tester/covoar/GcovData.cc index d4acfa4..44928a9 100644 --- a/tester/covoar/GcovData.cc +++ b/tester/covoar/GcovData.cc @@ -130,7 +130,7 @@ namespace Gcov { preamble.timestamp = gcnoPreamble.timestamp; //Write preamble - gcdaFile.write( (char *) &preamble , 4 * sizeof( preamble ) ); + gcdaFile.write( (char *) &preamble , sizeof( preamble ) ); if ( gcdaFile.fail() ) { std::cerr << "Error while writing gcda preamble to a file " << gcdaFileName << std::endl; @@ -400,13 +400,12 @@ namespace Gcov { uint32_t desiredMagic ) { - int length; - rtems::utils::ostream_guard old_state( std::cerr ); - length = sizeof( gcov_preamble ); - gcovFile.read( (char *) &preamble, 4 * sizeof( gcov_preamble ) ); - if ( gcovFile.gcount() != 4 * sizeof( gcov_preamble ) ) { + // Read the gcov preamble and make sure it is the right length and has the + // magic number + gcovFile.read( (char *) &preamble, sizeof( gcov_preamble ) ); + if ( gcovFile.gcount() != sizeof( gcov_preamble ) ) { std::cerr << "Error while reading file preamble" << std::endl; return -1; } @@ -418,7 +417,7 @@ namespace Gcov { return -1; } - return length / 4; + return sizeof( gcov_preamble ) / 4; } bool GcovData::readFunctionFrame( |