library_symbol_init may fail
diff --git a/ltrace-elf.c b/ltrace-elf.c
index b01d34c..e6cf253 100644
--- a/ltrace-elf.c
+++ b/ltrace-elf.c
@@ -60,7 +60,11 @@
target_address_t taddr = (target_address_t)(addr + lte->bias);
- library_symbol_init(libsym, taddr, name, 1, LS_TOPLT_EXEC);
+ if (library_symbol_init(libsym, taddr, name, 1, LS_TOPLT_EXEC) < 0) {
+ free(libsym);
+ goto fail;
+ }
+
*ret = libsym;
return 0;
}
@@ -600,12 +604,12 @@
if (unique->libsym == NULL) {
struct library_symbol *libsym = malloc(sizeof(*libsym));
- if (libsym == NULL) {
+ if (libsym == NULL
+ || library_symbol_init(libsym, naddr, full_name,
+ 1, LS_TOPLT_NONE) < 0) {
--num_symbols;
goto fail;
}
- library_symbol_init(libsym, naddr, full_name,
- 1, LS_TOPLT_NONE);
unique->libsym = libsym;
unique->addr = naddr;