aboutsummaryrefslogtreecommitdiff
path: root/backends/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'backends/plugins')
-rw-r--r--backends/plugins/elf/elf-loader.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/backends/plugins/elf/elf-loader.cpp b/backends/plugins/elf/elf-loader.cpp
index 17a67f4d02..24a4fda703 100644
--- a/backends/plugins/elf/elf-loader.cpp
+++ b/backends/plugins/elf/elf-loader.cpp
@@ -320,24 +320,30 @@ bool DLObject::load() {
return false;
}
- Common::ScopedPtrC<Elf32_Shdr> shdr(loadSectionHeaders(&ehdr));
+ Elf32_Shdr *shdr = loadSectionHeaders(&ehdr);
if (!shdr)
return false;
_symtab_sect = loadSymbolTable(&ehdr, shdr);
- if (_symtab_sect < 0)
+ if (_symtab_sect < 0) {
+ free(shdr);
return false;
+ }
- if (!loadStringTable(shdr))
+ if (!loadStringTable(shdr)) {
+ free(shdr);
return false;
+ }
// Offset by our segment allocated address
// must use _segmentVMA here for multiple segments (MIPS)
_segmentOffset = ptrdiff_t(_segment) - _segmentVMA;
relocateSymbols(_segmentOffset);
- if (!relocateRels(&ehdr, shdr))
+ if (!relocateRels(&ehdr, shdr)) {
+ free(shdr);
return false;
+ }
return true;
}