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;