diff --git a/pe-parser-library/src/parse.cpp b/pe-parser-library/src/parse.cpp index 42fbcb8..36bfaa4 100644 --- a/pe-parser-library/src/parse.cpp +++ b/pe-parser-library/src/parse.cpp @@ -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; }