[PATCH v2] GcovData.cc: Fix out-of-bounds access errors

Ryan Long ryan.long at oarcorp.com
Thu Aug 12 19:28:49 UTC 2021


Adjusted number of bytes to be read

CID 1506208: Out-of-bounds access
CID 1506209: Out-of-bounds access

Closes #4485
---
 tester/covoar/GcovData.cc | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/tester/covoar/GcovData.cc b/tester/covoar/GcovData.cc
index 02e7489..3b787ec 100644
--- a/tester/covoar/GcovData.cc
+++ b/tester/covoar/GcovData.cc
@@ -129,7 +129,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;
@@ -399,11 +399,10 @@ namespace Gcov {
      uint32_t       desiredMagic
   )
   {
-    int length;
-
-    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;
     }
@@ -415,7 +414,7 @@ namespace Gcov {
       return -1;
     }
 
-    return length / 4;
+    return sizeof( gcov_preamble ) / 4;
   }
 
   bool GcovData::readFunctionFrame(
-- 
1.8.3.1



More information about the devel mailing list