RFR: 8275007: Java fails to start with null charset if LC_ALL is set to certain locales [v3]
Ichiroh Takiguchi
itakiguchi at openjdk.java.net
Tue Nov 16 02:20:37 UTC 2021
On Mon, 15 Nov 2021 17:28:44 GMT, Naoto Sato <naoto at openjdk.org> wrote:
>> @naotoj , sorry for bothering you again.
>> Still I got exception. It seems value "jnuEncoding" should be overwritten or set "fastEncoding" to "FAST_UTF_8" on jnu_util.c.
>> Could you check this part again ?
>>
>> $ 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: 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: Provider sun.nio.cs.ext.ExtendedCharsets not found
>> at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:593)
>> at java.base/java.util.ServiceLoader.loadProvider(ServiceLoader.java:875)
>> 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/jdk.internal.loader.NativeLibraries.findBuiltinLib(Native Method)
>> at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:157)
>> at java.base/jdk.internal.loader.NativeLibraries.findFromPaths(NativeLibraries.java:322)
>> at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:289)
>> at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:274)
>> at java.base/jdk.internal.loader.BootLoader.loadLibrary(BootLoader.java:149)
>> at java.base/sun.nio.fs.UnixNativeDispatcher.<clinit>(UnixNativeDispatcher.java:667)
>> at java.base/sun.nio.fs.UnixFileSystem.<init>(UnixFileSystem.java:65)
>> 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/sun.launcher.LauncherHelper.loadModuleMainClass(LauncherHelper.java:748)
>> at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:683)
>
> Fallback to UTF-8 in jni_uti.c::InitializeEncoding() as well, if the jnu encoding is not supported. @takiguc, would you try the changeset on your environment?
Hello @naotoj .
Test results are as follows:
$ 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: PT154
Hello
$ env LC_ALL=kk_KZ.pt154 ./build/linux-x86_64-server-release/images/jdk/bin/java -XshowSettings:properties Hello.java 2>&1 | grep encoding
WARNING: The encoding of the underlying platform's file system is not supported: PT154
file.encoding = UTF-8
native.encoding = PT154
sun.io.unicode.encoding = UnicodeLittle
sun.jnu.encoding = UTF-8
$ env LC_ALL=kk_KZ.pt154 ./build/linux-x86_64-server-release/images/jdk/bin/java -Dfile.encoding=COMPAT Hello.java
WARNING: The encoding of the underlying platform's file system is not supported: PT154
Hello
$ env LC_ALL=kk_KZ.pt154 ./build/linux-x86_64-server-release/images/jdk/bin/java -XshowSettings:properties -Dfile.encoding=COMPAT Hello.java 2>&1 | grep encoding
WARNING: The encoding of the underlying platform's file system is not supported: PT154
file.encoding = PT154
native.encoding = PT154
sun.io.unicode.encoding = UnicodeLittle
sun.jnu.encoding = UTF-8
$ ./build/linux-x86_64-server-release/images/jdk/bin/java Hello.java
Hello
$ ./build/linux-x86_64-server-release/images/jdk/bin/java -XshowSettings:properties Hello.java 2>&1 | grep encoding
file.encoding = UTF-8
native.encoding = UTF-8
sun.io.unicode.encoding = UnicodeLittle
sun.jnu.encoding = UTF-8
These were what I expected.
Many thanks.
-------------
PR: https://git.openjdk.java.net/jdk/pull/6282
More information about the core-libs-dev
mailing list