[PATCH v1 3/6] GcovData.cc: Fix resource leak
Ryan Long
ryan.long at oarcorp.com
Fri May 28 20:08:15 UTC 2021
CID 1399610: Resource leak in readFrame().
Closes #4418
---
tester/covoar/GcovData.cc | 40 ++++++++++++++++++++++------------------
tester/covoar/GcovData.h | 4 ++--
2 files changed, 24 insertions(+), 20 deletions(-)
diff --git a/tester/covoar/GcovData.cc b/tester/covoar/GcovData.cc
index 5175fb3..e8b8573 100644
--- a/tester/covoar/GcovData.cc
+++ b/tester/covoar/GcovData.cc
@@ -151,13 +151,13 @@ namespace Gcov {
fprintf( stderr, "Error while writing function announcement to a file %s\n", gcdaFileName );
//Write function id
- buffer = (*currentFunction)->getId();
+ buffer = (*currentFunction).getId();
status = fwrite (&buffer, sizeof( buffer ), 1, gcdaFile );
if ( status != 1 )
fprintf( stderr, "Error while writing function id to a file %s\n", gcdaFileName );
//Write function checksum
- buffer = (*currentFunction)->getChecksum();
+ buffer = (*currentFunction).getChecksum();
status = fwrite (&buffer, sizeof( buffer ), 1, gcdaFile );
if ( status != 1 )
fprintf( stderr, "Error while writing function checksum to a file %s\n", gcdaFileName );
@@ -165,7 +165,7 @@ namespace Gcov {
// Determine how many counters there are
// and store their counts in buffer
countersFound = 0;
- (*currentFunction)->getCounters( llBuffer, countersFound, countersSum, countersMax );
+ (*currentFunction).getCounters( llBuffer, countersFound, countersSum, countersMax );
countersFoundSum += countersFound;
//Write info about counters
@@ -232,7 +232,6 @@ namespace Gcov {
uint32_t tempBlockId;
blocks_iterator_t tempBlockIterator;
int status;
- GcovFunctionData* newFunction;
status = readFrameHeader( &header, gcovFile);
@@ -246,13 +245,18 @@ namespace Gcov {
case GCOV_TAG_FUNCTION:
- numberOfFunctions++;
- newFunction = new GcovFunctionData;
- if ( !readFunctionFrame(header, gcovFile, newFunction) ){
- fprintf( stderr, "Error while reading FUNCTION from gcov file...\n" );
- return false;
+ {
+ numberOfFunctions++;
+ GcovFunctionData newFunction;
+
+ if ( !readFunctionFrame(header, gcovFile, &newFunction) ){
+ fprintf( stderr, "Error while reading FUNCTION from gcov file...\n" );
+ return false;
+ }
+
+ functions.push_back(newFunction);
}
- functions.push_back(newFunction);
+
break;
case GCOV_TAG_BLOCKS:
@@ -269,7 +273,7 @@ namespace Gcov {
}
for( uint32_t i = 0; i < header.length; i++ )
- functions.back()->addBlock(i, intBuffer[i], "");
+ functions.back().addBlock(i, intBuffer[i], "");
break;
@@ -281,7 +285,7 @@ namespace Gcov {
}
for ( int i = 1; i < (int) header.length; i += 2 )
- functions.back()->addArc(intBuffer[0], intBuffer[i], intBuffer[i+1]);
+ functions.back().addArc(intBuffer[0], intBuffer[i], intBuffer[i+1]);
break;
@@ -299,10 +303,10 @@ namespace Gcov {
header.length -= 2;
// Find the right block
- tempBlockIterator =functions.back()->findBlockById(tempBlockId);
+ tempBlockIterator =functions.back().findBlockById(tempBlockId);
header.length -= readString(buffer, gcovFile);
- functions.back()->setBlockFileName( tempBlockIterator, buffer );
+ functions.back().setBlockFileName( tempBlockIterator, buffer );
status = fread( &intBuffer, 4, header.length, gcovFile );
if (status != (int) header.length){
@@ -312,7 +316,7 @@ namespace Gcov {
else
for (int i = 0; i < (int) (header.length - 2); i++)
- functions.back()->addBlockLine( tempBlockIterator, intBuffer[i] );
+ functions.back().addBlockLine( tempBlockIterator, intBuffer[i] );
break;
@@ -449,8 +453,8 @@ namespace Gcov {
currentFunction++
)
{
- (*currentFunction)->printFunctionInfo( textFile, i );
- (*currentFunction)->printCoverageInfo( textFile, i );
+ (*currentFunction).printFunctionInfo( textFile, i );
+ (*currentFunction).printCoverageInfo( textFile, i );
i++;
}
@@ -497,7 +501,7 @@ namespace Gcov {
currentFunction++
)
{
- if ( !(*currentFunction)->processFunctionCounters( ) )
+ if ( !(*currentFunction).processFunctionCounters( ) )
status = false;
}
diff --git a/tester/covoar/GcovData.h b/tester/covoar/GcovData.h
index 94f5331..0e74b02 100644
--- a/tester/covoar/GcovData.h
+++ b/tester/covoar/GcovData.h
@@ -30,8 +30,8 @@ namespace Gcov {
#define GCOV_TAG_PROGRAM_SUMMARY ((uint32_t)0xa3000000)
-typedef std::list<Gcov::GcovFunctionData*> functions_t;
-typedef std::list<Gcov::GcovFunctionData*>::iterator functions_iterator_t;
+typedef std::list<Gcov::GcovFunctionData> functions_t;
+typedef std::list<Gcov::GcovFunctionData>::iterator functions_iterator_t;
struct gcov_preamble
{
--
1.8.3.1
More information about the devel
mailing list