Fix memory leaks during cleanup of malformed PE (#146)

Replace copied cleanup deletes with `DestructParsedPE` function
This commit is contained in:
Eric Kilmer 2021-03-12 15:37:36 -05:00 committed by GitHub
parent e5ba0165ab
commit 6af9a82335
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2381,8 +2381,8 @@ parsed_pe *ParsePEFromBuffer(bounded_buffer *buffer) {
// get header information
bounded_buffer *remaining = nullptr;
if (!getHeader(p->fileBuffer, p->peHeader, remaining)) {
deleteBuffer(p->fileBuffer);
delete p;
deleteBuffer(remaining);
DestructParsedPE(p);
// err is set by getHeader
return nullptr;
}
@ -2390,16 +2390,14 @@ parsed_pe *ParsePEFromBuffer(bounded_buffer *buffer) {
bounded_buffer *file = p->fileBuffer;
if (!getSections(remaining, file, p->peHeader.nt, p->internal->secs)) {
deleteBuffer(remaining);
deleteBuffer(p->fileBuffer);
delete p;
DestructParsedPE(p);
PE_ERR(PEERR_SECT);
return nullptr;
}
if (!getResources(remaining, file, p->internal->secs, p->internal->rsrcs)) {
deleteBuffer(remaining);
deleteBuffer(p->fileBuffer);
delete p;
DestructParsedPE(p);
PE_ERR(PEERR_RESC);
return nullptr;
}
@ -2407,8 +2405,7 @@ parsed_pe *ParsePEFromBuffer(bounded_buffer *buffer) {
// Get exports
if (!getExports(p)) {
deleteBuffer(remaining);
deleteBuffer(p->fileBuffer);
delete p;
DestructParsedPE(p);
PE_ERR(PEERR_MAGIC);
return nullptr;
}
@ -2416,8 +2413,7 @@ parsed_pe *ParsePEFromBuffer(bounded_buffer *buffer) {
// Get relocations, if exist
if (!getRelocations(p)) {
deleteBuffer(remaining);
deleteBuffer(p->fileBuffer);
delete p;
DestructParsedPE(p);
PE_ERR(PEERR_MAGIC);
return nullptr;
}
@ -2425,16 +2421,14 @@ parsed_pe *ParsePEFromBuffer(bounded_buffer *buffer) {
// Get imports
if (!getImports(p)) {
deleteBuffer(remaining);
deleteBuffer(p->fileBuffer);
delete p;
DestructParsedPE(p);
return nullptr;
}
// Get symbol table
if (!getSymbolTable(p)) {
deleteBuffer(remaining);
deleteBuffer(p->fileBuffer);
delete p;
DestructParsedPE(p);
return nullptr;
}