Console.readPassword() was failed on Linux s390x platform
Hello. I ran following testcase on Linux s390x platform. ------ import java.io.Console; public class ConsoleTestC { public static void main(String[] args) { Console console = System.console(); char password[] = console.readPassword("password> "); System.out.println(password); } } ------ Test instruction 1. Compile and run ConsoleTestC on terminal $ java ConsoleTestC password> 2. Type "abc", then "abc" is displayed 3. Type "ls", but nothing is displayed 4. Type "stty echo" to change back the setting I wrote following program for PD. ------ import java.io.*; import java.lang.reflect.*; public class ConsoleTestB { public static void main(String[] args) throws Exception { Console console = System.console(); Method echo = Console.class.getDeclaredMethod("echo", boolean.class); echo.setAccessible(true); System.out.println("echo false"); System.out.println(echo.invoke(console, false)); console.reader().read(); System.out.println("echo true"); System.out.println(echo.invoke(console, true)); } } ------ Test instruction 1. Compile and run ConsoleTestB on terminal $ java ConsoleTestB ...... echo false false 2. Last output should be "true", so Java could not read echo flag properly 3. Press return key echo true false $ Console.readPassword() could not read initial echo flag, so move back to "-echo" instead of "echo" Fix candidate is as follows: ====== diff -r 14708e1acdc3 src/java.base/unix/native/libjava/Console_md.c --- a/src/java.base/unix/native/libjava/Console_md.c Tue Jul 03 09:27:41 2018 +0800 +++ b/src/java.base/unix/native/libjava/Console_md.c Fri Jul 20 02:52:38 2018 +0900 @@ -56,7 +56,7 @@ JNU_ThrowIOExceptionWithLastError(env, "tcgetattr failed"); return !on; } - old = (tio.c_lflag & ECHO); + old = (tio.c_lflag & ECHO) == ECHO ? JNI_TRUE : JNI_FALSE; if (on) { tio.c_lflag |= ECHO; } else { ====== I'd like to obtain a sponsor for this patch. Could you put it into JDK11 ? Thanks, Ichiroh Takiguchi IBM Japan, Ltd.
participants (1)
-
Ichiroh Takiguchi