RFR: JDK-8194750, Console.readPassword does not save/restore tty settings

Martin Buchholz martinrb at google.com
Sat Apr 14 03:04:01 UTC 2018

 Emacs users thank you for working on this.  To repro, try emacs -q, M-x
shell and run your manual test in there.  You'll see stty -a reports -echo.

This is trickier than I expected, since you have to manage saving/restoring
around each call to readPassword AND have an exit hook to restore in case
the user never gets around to responding to the prompt.

I see in the old code echo returns a boolean that you would think could be
used to restore.  You want to save/restore around each readPassword AND
around the entire java program.  It still seems right to restore after
every readpassword, using the returned value from echo (which the suggested
fix ignores!).  But also, the very first time readPassword is called, you
create an exit hook to restore the value known at that time.  So you need
echo0 as well ... or do you ... maybe you just need to keep track of a
single state variable for you to do first-time setup.

+    return tio.c_lflag & ECHO;

Pedantically, functions returning jboolean should return only JNI_TRUE and
JNI_FALSE.  I would do:

return (tio.c_lflag & ECHO) != 0;

although there's the even more pedantic

return ((tio.c_lflag & ECHO) != 0) ? JNI_TRUE : JNI_FALSE;

typo: chosole

On Fri, Apr 13, 2018 at 2:10 PM, Xueming Shen <xueming.shen at oracle.com>

> Hi,
> Please help review the change for JDK-8194750.
> issue: https://bugs.openjdk.java.net/browse/JDK-8194750
> webrev: http://cr.openjdk.java.net/~sherman/8194750/webrev
> *fix has been manually verified. No new auto-regression test added.
> Thanks,
> Sherman

More information about the core-libs-dev mailing list