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