Integrated: 8355371: NegativeArraySizeException in print methods in IO or System.console() in JShell

Tatsunori Uchino duke at openjdk.org
Mon May 5 05:05:51 UTC 2025


On Sat, 26 Apr 2025 15:54:40 GMT, Tatsunori Uchino <duke at openjdk.org> wrote:

> This PR will fix not only JDK-8355371 but also JDK-8354910. I chose the more serious one.
> 
> Note: according to JEP-512 (JDK-8344699), java.io.IO is going to stop using System.console().
> I confirmed it by checking out and building https://github.com/openjdk/jdk/pull/24438. (in that PR, the bug does not occur in `IO.print(ln)`)
> 
> Before (Temurin 24):
> 
> 
> jshell> IO.println("a".repeat(128))
> Exception in thread "output reader" java.lang.NegativeArraySizeException: -128
> |  State engine terminated.     at jdk.jshell/jdk.jshell.execution.impl.ConsoleImpl$ConsoleOutputStream.readCharsOrNull(ConsoleImpl.java:486)
> 
>         at jdk.jshell/jdk.jshell.execution.impl.ConsoleImpl$ConsoleOutputStream.write(ConsoleImpl.java:402)
>         at java.base/java.io.OutputStream.write(OutputStream.java:167)
> |  Restore definitions with: /reload -restore
>         at java.base/java.io.OutputStream.write(OutputStream.java:124)
>         at jdk.jshell/jdk.jshell.execution.DemultiplexInput.run(DemultiplexInput.java:74)
> 
> jshell> IO.println("ドラえもん")
> ￉←えツモ
> 
> jshell> System.console().writer().println("a".repeat(128))
> Exception in thread "output reader" java.lang.NegativeArraySizeException: -128
>         at jdk.jshell/jdk.jshell.execution.impl.ConsoleImpl$ConsoleOutputStream.readCharsOrNull(ConsoleImpl.java:486)
> |  State engine terminated.
>         at jdk.jshell/jdk.jshell.execution.impl.ConsoleImpl$ConsoleOutputStream.write(ConsoleImpl.java:402)
>         at java.base/java.io.OutputStream.write(OutputStream.java:167)
> |  Restore definitions with: /reload -restore   at java.base/java.io.OutputStream.write(OutputStream.java:124)
> 
>         at jdk.jshell/jdk.jshell.execution.DemultiplexInput.run(DemultiplexInput.java:74)
> 
> jshell> System.console().writer().println("ドラえもん")
> ￉←えツモ
> 
> 
> After (master & without https://github.com/openjdk/jdk/pull/24438):
> 
> 
> jshell> IO.println("a".repeat(128))
> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> 
> jshell> IO.println("ドラえもん")
> ドラえもん
> 
> jshell> System.console().writer().println("a".repeat(128))
> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> 
> jshell> System.console().writer().println("ドラえもん")
> ドラえもん
> 
> 
> I don't know how to prepare the template other PRs use or whether outsiders like me may create a PR.

This pull request has now been integrated.

Changeset: c8ce61c8
Author:    Tatsunori Uchino <tats.u at live.jp>
Committer: Jan Lahoda <jlahoda at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/c8ce61c8cadaf0371dc490c76b753f98bbaa118a
Stats:     29 lines in 2 files changed: 27 ins; 0 del; 2 mod

8355371: NegativeArraySizeException in print methods in IO or System.console() in JShell
8354910: Output by java.io.IO or System.console() corrupted for some non-ASCII characters

Reviewed-by: liach, jlahoda

-------------

PR: https://git.openjdk.org/jdk/pull/24897


More information about the kulla-dev mailing list