[PATCH v1 1/6] Explanations.cc: Fix resource leaks
Ryan Long
ryan.long at oarcorp.com
Fri May 28 20:08:13 UTC 2021
CID 1399608: Resource leak in load().
CID 1399611: Resource leak in load().
Closes #4417
---
tester/covoar/Explanations.cc | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/tester/covoar/Explanations.cc b/tester/covoar/Explanations.cc
index 12bd809..d94cd2e 100644
--- a/tester/covoar/Explanations.cc
+++ b/tester/covoar/Explanations.cc
@@ -32,7 +32,7 @@ namespace Coverage {
#define MAX_LINE_LENGTH 512
FILE *explain;
char *cStatus;
- Explanation *e;
+ Explanation e;
int line = 1;
if (!explanations)
@@ -46,7 +46,6 @@ namespace Coverage {
}
while ( 1 ) {
- e = new Explanation;
// Read the starting line of this explanation and
// skip blank lines between
do {
@@ -65,12 +64,13 @@ namespace Coverage {
what << "line " << line
<< "contains a duplicate explanation ("
<< inputBuffer << ")";
+ fclose( explain );
throw rld::error( what, "Explanations::load" );
}
// Add the starting line and file
- e->startingPoint = std::string(inputBuffer);
- e->found = false;
+ e.startingPoint = std::string(inputBuffer);
+ e.found = false;
// Get the classification
cStatus = fgets( inputBuffer, MAX_LINE_LENGTH, explain );
@@ -78,10 +78,11 @@ namespace Coverage {
std::ostringstream what;
what << "line " << line
<< "out of sync at the classification";
+ fclose( explain );
throw rld::error( what, "Explanations::load" );
}
inputBuffer[ strlen(inputBuffer) - 1] = '\0';
- e->classification = inputBuffer;
+ e.classification = inputBuffer;
line++;
// Get the explanation
@@ -92,6 +93,7 @@ namespace Coverage {
std::ostringstream what;
what << "line " << line
<< "out of sync at the explanation";
+ fclose( explain );
throw rld::error( what, "Explanations::load" );
}
inputBuffer[ strlen(inputBuffer) - 1] = '\0';
@@ -102,15 +104,17 @@ namespace Coverage {
break;
}
// XXX only taking last line. Needs to be a vector
- e->explanation.push_back( inputBuffer );
+ e.explanation.push_back( inputBuffer );
}
// Add this to the set of Explanations
- set[ e->startingPoint ] = *e;
+ set[ e.startingPoint ] = e;
}
done:
;
+ fclose( explain );
+
#undef MAX_LINE_LENGTH
}
--
1.8.3.1
More information about the devel
mailing list