Duplicate library pathname
diff --git a/ltrace-elf.c b/ltrace-elf.c
index d7cb1fd..bec85a0 100644
--- a/ltrace-elf.c
+++ b/ltrace-elf.c
@@ -465,19 +465,22 @@
 	proc->e_machine = lte.ehdr.e_machine;
 
 	struct library *lib = malloc(sizeof(*lib));
+	if (lib != NULL)
+		library_init(lib);
+	filename = strdup(filename);
 	char *soname = NULL;
 	int own_soname = 0;
-	if (lib == NULL) {
+	if (lib == NULL || filename == NULL) {
 	fail:
 		if (own_soname)
 			free(soname);
 		if (lib != NULL)
 			library_destroy(lib);
+		free((char *)filename);
 		free(lib);
 		lib = NULL;
 		goto done;
 	}
-	library_init(lib);
 
 	if (lte.soname != NULL) {
 		soname = strdup(lte.soname);