RFR: 8275007: Java fails to start with null charset if LC_ALL is set to certain locales
Ichiroh Takiguchi
itakiguchi at openjdk.java.net
Wed Nov 10 03:34:38 UTC 2021
On Tue, 9 Nov 2021 19:38:46 GMT, Naoto Sato <naoto at openjdk.org> wrote:
>>> If this issue is not a part of JEP-400, I think UTF_8 may not be only solution for sun/nio/fs/Util.java.
>>> Please explain why UTF_8 is better than ISO_8859_1.
>>
>> Just to add to Naoto's comment. When the JDK starts in unusual/unsupported configurations then it needs a default for the stdout/stderr print streams, for encoding/decoding files paths in java.io, and for encoding/decoding files paths in the java.nio.file implementation. It's important that the latter two are the same, having one be UTF-8 and the other be 8859-1 won't work.
>>
>> There may be an argument that the JDK should emit a warning at startup.
>
>> There may be an argument that the JDK should emit a warning at startup.
>
> Updated to emit a warning, if `sun.jnu.encoding` is not supported.
Hello @naotoj .
I appreciate your code update.
I'd like to confirm one thing.
If you could not recreate this issue on your test machine, please ignore this message.
I tested your code on my CentOS7 x86_64.
I saw following exception.
$ git log --oneline | head
e91e9d85327 8276721: G1: Refine G1EvacFailureObjectsSet::iterate
8822d41fdcc 8274736: Concurrent read/close of SSLSockets causes SSLSessions to be invalidated unnecessarily
c1e41fe38bb 8276842: G1: Only calculate size in bytes from words when needed
c8b0ee6b8a0 8276833: G1: Make G1EvacFailureRegions::par_iterate const
0699220830a 8268882: C2: assert(n->outcnt() != 0 || C->top() == n || n->is_Proj()) failed: No dead instructions after post-alloc
d7012fbd604 8276880: Remove java/lang/RuntimeTests/exec/ExecWithDir as unnecessary
f9024d0606e 8230130: javadoc search result dialog shows cut off headers for long results
055de6f5662 8223358: Incorrect HTML structure in annotation pages
a60e91259ba 8198626: java/awt/KeyboardFocusmanager/TypeAhead/TestDialogTypeAhead.html fails on mac
dde959dfcef 8276808: java/nio/channels/Channels/TransferTo.java timed out
$ cat Hello.java
public class Hello {
public static void main(String[] args) throws Exception {
System.out.println("Hello");
}
}
$ env LC_ALL=kk_KZ.pt154 locale
LANG=ja_JP.UTF-8
LC_CTYPE="kk_KZ.pt154"
LC_NUMERIC="kk_KZ.pt154"
LC_TIME="kk_KZ.pt154"
LC_COLLATE="kk_KZ.pt154"
LC_MONETARY="kk_KZ.pt154"
LC_MESSAGES="kk_KZ.pt154"
LC_PAPER="kk_KZ.pt154"
LC_NAME="kk_KZ.pt154"
LC_ADDRESS="kk_KZ.pt154"
LC_TELEPHONE="kk_KZ.pt154"
LC_MEASUREMENT="kk_KZ.pt154"
LC_IDENTIFICATION="kk_KZ.pt154"
LC_ALL=kk_KZ.pt154
$ env LC_ALL=kk_KZ.pt154 ./build/linux-x86_64-server-release/images/jdk/bin/java Hello.java
WARNING: The encoding of the underlying platform's file system is not supported by the JVM: PT154
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.util.ServiceConfigurationError: java.nio.charset.spi.CharsetProvider: Unable to load sun.nio.cs.ext.ExtendedCharsets
at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586)
at java.base/java.util.ServiceLoader.loadProvider(ServiceLoader.java:861)
at java.base/java.util.ServiceLoader$ModuleServicesLookupIterator.hasNext(ServiceLoader.java:1084)
at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1309)
at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1393)
at java.base/java.nio.charset.Charset$ExtendedProviderHolder$1.run(Charset.java:428)
at java.base/java.nio.charset.Charset$ExtendedProviderHolder$1.run(Charset.java:422)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at java.base/java.nio.charset.Charset$ExtendedProviderHolder.extendedProviders(Charset.java:422)
at java.base/java.nio.charset.Charset$ExtendedProviderHolder.<clinit>(Charset.java:418)
at java.base/java.nio.charset.Charset.lookupExtendedCharset(Charset.java:442)
at java.base/java.nio.charset.Charset.lookup2(Charset.java:472)
at java.base/java.nio.charset.Charset.lookup(Charset.java:460)
at java.base/java.nio.charset.Charset.isSupported(Charset.java:501)
at java.base/sun.launcher.LauncherHelper.makePlatformString(LauncherHelper.java:891)
Caused by: java.lang.ExceptionInInitializerError
at java.base/sun.nio.fs.UnixFileSystem.<init>(UnixFileSystem.java:51)
at java.base/sun.nio.fs.LinuxFileSystem.<init>(LinuxFileSystem.java:39)
at java.base/sun.nio.fs.LinuxFileSystemProvider.newFileSystem(LinuxFileSystemProvider.java:46)
at java.base/sun.nio.fs.LinuxFileSystemProvider.newFileSystem(LinuxFileSystemProvider.java:39)
at java.base/sun.nio.fs.UnixFileSystemProvider.<init>(UnixFileSystemProvider.java:55)
at java.base/sun.nio.fs.LinuxFileSystemProvider.<init>(LinuxFileSystemProvider.java:41)
at java.base/sun.nio.fs.DefaultFileSystemProvider.<clinit>(DefaultFileSystemProvider.java:35)
at java.base/java.nio.file.FileSystems$DefaultFileSystemHolder.getDefaultProvider(FileSystems.java:114)
at java.base/java.nio.file.FileSystems$DefaultFileSystemHolder$1.run(FileSystems.java:103)
at java.base/java.nio.file.FileSystems$DefaultFileSystemHolder$1.run(FileSystems.java:101)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at java.base/java.nio.file.FileSystems$DefaultFileSystemHolder.defaultFileSystem(FileSystems.java:101)
at java.base/java.nio.file.FileSystems$DefaultFileSystemHolder.<clinit>(FileSystems.java:94)
at java.base/java.nio.file.FileSystems.getDefault(FileSystems.java:183)
at java.base/java.nio.file.Path.of(Path.java:147)
at java.base/java.nio.file.Paths.get(Paths.java:69)
at java.base/jdk.internal.jimage.ImageReaderFactory.<clinit>(ImageReaderFactory.java:51)
at java.base/jdk.internal.module.SystemModuleFinders$SystemImage.<clinit>(SystemModuleFinders.java:385)
at java.base/jdk.internal.module.SystemModuleFinders$SystemModuleReader.findImageLocation(SystemModuleFinders.java:429)
at java.base/jdk.internal.module.SystemModuleFinders$SystemModuleReader.read(SystemModuleFinders.java:483)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:809)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassInModuleOrNull(BuiltinClassLoader.java:741)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClass(BuiltinClassLoader.java:621)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:633)
at java.base/java.lang.Class.forName(Class.java:577)
at java.base/java.lang.Class.forName(Class.java:552)
at java.base/java.util.ServiceLoader.loadProvider(ServiceLoader.java:859)
... 13 more
Caused by: java.lang.NullPointerException: Cannot read the array length because "<local2>" is null
at java.base/java.nio.charset.Charset.lookupExtendedCharset(Charset.java:443)
at java.base/java.nio.charset.Charset.lookup2(Charset.java:472)
at java.base/java.nio.charset.Charset.lookup(Charset.java:460)
at java.base/java.nio.charset.Charset.forName(Charset.java:556)
at java.base/sun.nio.fs.Util.<clinit>(Util.java:41)
... 40 more
-------------
PR: https://git.openjdk.java.net/jdk/pull/6282
More information about the core-libs-dev
mailing list