[git commit] cryptpw: do not segfault on EOF. Closes 6350

Denys Vlasenko vda.linux at googlemail.com
Sun Jun 30 19:28:55 UTC 2013


commit: http://git.busybox.net/busybox/commit/?id=1bf560e9c374b073757509b334eb099c59f64191
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 loginutils/cryptpw.c |   19 ++++++++++++-------
 1 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/loginutils/cryptpw.c b/loginutils/cryptpw.c
index a36f920..29f0fbe 100644
--- a/loginutils/cryptpw.c
+++ b/loginutils/cryptpw.c
@@ -92,6 +92,7 @@ int cryptpw_main(int argc UNUSED_PARAM, char **argv)
 {
 	char salt[MAX_PW_SALT_LEN];
 	char *salt_ptr;
+	char *password;
 	const char *opt_m, *opt_S;
 	int fd;
 
@@ -123,15 +124,19 @@ int cryptpw_main(int argc UNUSED_PARAM, char **argv)
 
 	xmove_fd(fd, STDIN_FILENO);
 
-	puts(pw_encrypt(
-		argv[0] ? argv[0] : (
-			/* Only mkpasswd, and only from tty, prompts.
-			 * Otherwise it is a plain read. */
-			(isatty(STDIN_FILENO) && applet_name[0] == 'm')
+	password = argv[0];
+	if (!password) {
+		/* Only mkpasswd, and only from tty, prompts.
+		 * Otherwise it is a plain read. */
+		password = (isatty(STDIN_FILENO) && applet_name[0] == 'm')
 			? bb_ask_stdin("Password: ")
 			: xmalloc_fgetline(stdin)
-		),
-		salt, 1));
+		;
+		/* may still be NULL on EOF/error */
+	}
+
+	if (password)
+		puts(pw_encrypt(password, salt, 1));
 
 	return EXIT_SUCCESS;
 }


More information about the busybox-cvs mailing list