mirror of
https://github.com/QuasarApp/pe-parse.git
synced 2025-04-27 21:04:31 +00:00
Fix memory leaks during cleanup of malformed PE (#146)
Replace copied cleanup deletes with `DestructParsedPE` function
This commit is contained in:
parent
e5ba0165ab
commit
6af9a82335
@ -2381,8 +2381,8 @@ parsed_pe *ParsePEFromBuffer(bounded_buffer *buffer) {
|
|||||||
// get header information
|
// get header information
|
||||||
bounded_buffer *remaining = nullptr;
|
bounded_buffer *remaining = nullptr;
|
||||||
if (!getHeader(p->fileBuffer, p->peHeader, remaining)) {
|
if (!getHeader(p->fileBuffer, p->peHeader, remaining)) {
|
||||||
deleteBuffer(p->fileBuffer);
|
deleteBuffer(remaining);
|
||||||
delete p;
|
DestructParsedPE(p);
|
||||||
// err is set by getHeader
|
// err is set by getHeader
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -2390,16 +2390,14 @@ parsed_pe *ParsePEFromBuffer(bounded_buffer *buffer) {
|
|||||||
bounded_buffer *file = p->fileBuffer;
|
bounded_buffer *file = p->fileBuffer;
|
||||||
if (!getSections(remaining, file, p->peHeader.nt, p->internal->secs)) {
|
if (!getSections(remaining, file, p->peHeader.nt, p->internal->secs)) {
|
||||||
deleteBuffer(remaining);
|
deleteBuffer(remaining);
|
||||||
deleteBuffer(p->fileBuffer);
|
DestructParsedPE(p);
|
||||||
delete p;
|
|
||||||
PE_ERR(PEERR_SECT);
|
PE_ERR(PEERR_SECT);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!getResources(remaining, file, p->internal->secs, p->internal->rsrcs)) {
|
if (!getResources(remaining, file, p->internal->secs, p->internal->rsrcs)) {
|
||||||
deleteBuffer(remaining);
|
deleteBuffer(remaining);
|
||||||
deleteBuffer(p->fileBuffer);
|
DestructParsedPE(p);
|
||||||
delete p;
|
|
||||||
PE_ERR(PEERR_RESC);
|
PE_ERR(PEERR_RESC);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -2407,8 +2405,7 @@ parsed_pe *ParsePEFromBuffer(bounded_buffer *buffer) {
|
|||||||
// Get exports
|
// Get exports
|
||||||
if (!getExports(p)) {
|
if (!getExports(p)) {
|
||||||
deleteBuffer(remaining);
|
deleteBuffer(remaining);
|
||||||
deleteBuffer(p->fileBuffer);
|
DestructParsedPE(p);
|
||||||
delete p;
|
|
||||||
PE_ERR(PEERR_MAGIC);
|
PE_ERR(PEERR_MAGIC);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -2416,8 +2413,7 @@ parsed_pe *ParsePEFromBuffer(bounded_buffer *buffer) {
|
|||||||
// Get relocations, if exist
|
// Get relocations, if exist
|
||||||
if (!getRelocations(p)) {
|
if (!getRelocations(p)) {
|
||||||
deleteBuffer(remaining);
|
deleteBuffer(remaining);
|
||||||
deleteBuffer(p->fileBuffer);
|
DestructParsedPE(p);
|
||||||
delete p;
|
|
||||||
PE_ERR(PEERR_MAGIC);
|
PE_ERR(PEERR_MAGIC);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -2425,16 +2421,14 @@ parsed_pe *ParsePEFromBuffer(bounded_buffer *buffer) {
|
|||||||
// Get imports
|
// Get imports
|
||||||
if (!getImports(p)) {
|
if (!getImports(p)) {
|
||||||
deleteBuffer(remaining);
|
deleteBuffer(remaining);
|
||||||
deleteBuffer(p->fileBuffer);
|
DestructParsedPE(p);
|
||||||
delete p;
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get symbol table
|
// Get symbol table
|
||||||
if (!getSymbolTable(p)) {
|
if (!getSymbolTable(p)) {
|
||||||
deleteBuffer(remaining);
|
deleteBuffer(remaining);
|
||||||
deleteBuffer(p->fileBuffer);
|
DestructParsedPE(p);
|
||||||
delete p;
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user