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