Console.readPassword() was failed on Linux s390x platform
Ichiroh Takiguchi
takiguc at linux.vnet.ibm.com
Fri Jul 20 06:52:24 UTC 2018
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.
>>
More information about the core-libs-dev
mailing list