RFR: 8330998: System.console() writes to stderr when stdout is redirected
Jan Lahoda
jlahoda at openjdk.org
Mon Apr 29 11:49:30 UTC 2024
Consider code like:
public class ConsoleTest {
public static void main(String... args) {
System.console().printf("Hello!");
}
}
When run as:
$ java ConsoleTest.java >/dev/null
it prints `Hello!` to stderr, instead of to stdout (where it would be redirected).
The proposed fix is to simply force the use of stdout. Sadly, this cannot be done solely using JLine configuration, we actually need to change the JLine's code for that.
The most tricky part is a test. There are two sub-tests, one effectively testing a case where all of stdin/out/err are redirected, the other is attempting to test the case where stdin is attached to a terminal, while stdout is redirected. The second sub-test using a native functions to create a pty and to attach to it, and should run in a separate VM, as it leaves the VM attached to the terminal.
-------------
Commit messages:
- Fixing test.
- Attempting to stabilize the test.
- Improving test to really test the redirect while stdin is connected to a terminal.
- Fixing typo.
- 8330998: System.console() writes to stderr when stdout is redirected
Changes: https://git.openjdk.org/jdk/pull/18996/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=18996&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8330998
Stats: 212 lines in 3 files changed: 209 ins; 0 del; 3 mod
Patch: https://git.openjdk.org/jdk/pull/18996.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/18996/head:pull/18996
PR: https://git.openjdk.org/jdk/pull/18996
More information about the core-libs-dev
mailing list