Hello Maurice,

Do you have a stack trace?

Gary

On Fri, Aug 1, 2025 at 7:52 PM Maurice Lam <[email protected]> wrote:

> I recently ran into an issue using NioZipEncoding (via
> CpioArchiveOutputStream).
>
> The minimal reproducing code snippet looks like this:
>
> ```
> val encoding = ZipEncodingHelper.getZipEncoding(
> StandardCharsets.US_ASCII.name())
> encoding.encode("÷")
> ```
>
> This crashes on Android with "IllegalStateException: Current state =
> CODING, new state = CODING" (code
> <
> https://cs.android.com/android/platform/superproject/main/+/main:libcore/ojluni/src/main/java/java/nio/charset/CharsetEncoder.java;l=952;drc=5498505951a9e607d809fc88da616f4249eb414e
> >
> ).
>
> My first inclination was to file this bug to Android, but reading the
> documentation for CharsetEncoder.canEncode
> <
> https://docs.oracle.com/javase/8/docs/api/java/nio/charset/CharsetEncoder.html
> >,
> it mentions that IllegalStateException is thrown "If an encoding operation
> is already in progress". Looks like the code in NioZipEncoding is doing
> exactly that.
>
> I believe the reason that it doesn't throw on desktop JVMs is that the Sun
> implementation overrides canEncode
> <
> https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/sun/nio/cs/US_ASCII.java#L138
> >,
> whereas on Android they use an alternative implementation that uses the
> base implementation in CharsetEncoder.
>
> Maurice
>

Reply via email to