Explorar el Código

Fix a couple of silly bugs I'd left in while fixing things
-Erik

Eric Andersen hace 22 años
padre
commit
6a44e26b67
Se han modificado 1 ficheros con 11 adiciones y 5 borrados
  1. 11 5
      ldso/util/ldd.c

+ 11 - 5
ldso/util/ldd.c

@@ -244,10 +244,12 @@ void locate_library_file(Elf32_Ehdr* ehdr, Elf32_Dyn* dynamic, char *strtab,
 	/* Next look for libraries wherever the shared library 
 	 * loader was installed -- this is usually where we
 	 * should find things... */
-	search_for_named_library(lib->name, buf, interp_dir);
-	if (*buf != '\0') {
-		lib->path = buf;
-		return;
+	if (interp_dir) {
+		search_for_named_library(lib->name, buf, interp_dir);
+		if (*buf != '\0') {
+			lib->path = buf;
+			return;
+		}
 	}
 
 	/* Lastly, search the standard list of paths for the library.
@@ -355,6 +357,10 @@ static void find_elf_interpreter(Elf32_Ehdr* ehdr, Elf32_Dyn* dynamic, char *str
 		tmp = strrchr(interp_dir, '/');
 		if (*tmp)
 			*tmp = '\0';
+		else {
+			free(interp_dir);
+			interp_dir = interp;
+		}
 		tmp1 = tmp = s;
 		while (*tmp) {
 			if (*tmp == '/')
@@ -495,7 +501,7 @@ int main( int argc, char** argv)
 		got_em_all=1;
 		printf("\t%s => %s\n", cur->name, cur->path);
 	}
-	if (got_em_all==1)
+	if (interp_dir && got_em_all==1)
 		printf("\t%s => %s\n", interp, interp);
 	if (got_em_all==0)
 		printf("\tnot a dynamic executable\n");