Hello.

I ran ConsTestB on AdoptOpenJDK prebuilt.
===========================
$ ~/jdk8u172-b11/jre/bin/java -showversion ConsoleTestB
openjdk version "1.8.0-adoptopenjdk"
OpenJDK Runtime Environment (build 1.8.0-adoptopenjdk-jenkins_2018_05_18_21_00-b00)
OpenJDK 64-Bit Zero VM (build 25.71-b00, interpreted mode)

echo false
true
echo true
false
$ ~/jdk-10+46/bin/java -showversion ConsoleTestB
openjdk version "10-adoptopenjdk" 2018-03-20
OpenJDK Runtime Environment (build 10-adoptopenjdk+0-adhoc.jenkins.openjdk) Eclipse OpenJ9 VM (build master-2954f9d4, JRE 10 Linux s390x-64 Compressed References 20180329_15 (JIT enabled, AOT enabled)
OpenJ9   - 2954f9d4
OMR      - 963e23a2
JCL      - 5692cdfa3a based on )
...
echo false
true
echo true
false
===========================

Both build worked fine.

I applied following change.
===========================
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 15:37:59 2018 +0900
@@ -56,7 +56,7 @@
         JNU_ThrowIOExceptionWithLastError(env, "tcgetattr failed");
         return !on;
     }
-    old = (tio.c_lflag & ECHO);
+    old = (tio.c_lflag & ECHO) != 0;
     if (on) {
         tio.c_lflag |= ECHO;
     } else {
===========================

It worked fine.
===========================
$ java ConsoleTestB
...
echo false
true
echo true
false
===========================


On 2018-07-20 03:36, Xueming Shen wrote:
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.


Reply via email to