From ae6d86c079a73eeb6554b37ec57436d748527b02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 26 Jan 2016 17:05:38 -0500 Subject: [PATCH 4/6] ask-password-api: only emit a star on valid unicode codepoint https://bugzilla.redhat.com/show_bug.cgi?id=1301984 (cherry picked from commit f3149d57b6e4c9e9abd3525c5266e0e258e8572d) Resolves: #1301984 --- src/shared/ask-password-api.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c index 3941605..f26b28f 100644 --- a/src/shared/ask-password-api.c +++ b/src/shared/ask-password-api.c @@ -39,6 +39,7 @@ #include "terminal-util.h" #include "signal-util.h" #include "ask-password-api.h" +#include "utf8.h" static void backspace_chars(int ttyfd, size_t p) { @@ -60,8 +61,8 @@ int ask_password_tty( char **_passphrase) { struct termios old_termios, new_termios; - char passphrase[LINE_MAX], *x; - size_t p = 0; + char passphrase[LINE_MAX + 1] = {}, *x; + size_t p = 0, codepoint = 0; int r; _cleanup_close_ int ttyfd = -1, notify = -1; struct pollfd pollfd[2]; @@ -221,8 +222,13 @@ int ask_password_tty( passphrase[p++] = c; - if (!silent_mode && ttyfd >= 0) - loop_write(ttyfd, echo ? &c : "*", 1, false); + if (!silent_mode && ttyfd >= 0) { + n = utf8_encoded_valid_unichar(passphrase + codepoint); + if (n >= 0) { + codepoint = p; + loop_write(ttyfd, echo ? &c : "*", 1, false); + } + } dirty = true; } -- 2.5.0