Console.readPassword() was failed on Linux s390x platform
Xueming Shen
xueming.shen at oracle.com
Thu Jul 19 18:36:19 UTC 2018
Hi Ichiroh,
Does the test case always fail? how about the previous version? The
Console class was updated slightly in 11 though.
does "old = (tio.c_lflag & ECHO) != 0" fix the issue as well?
Please file a issue with appropriate P value. Not sure if it can make 11.
Thanks,
Sherman
old = (tio.c_lflag & ECHO) == ECHO ? JNI_TRUE : JNI_FALSE;
On 7/19/18, 11:06 AM, Ichiroh Takiguchi wrote:
> 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.
>
More information about the core-libs-dev
mailing list