JDK-8160457 : VersionProps.versionNumbers() is broken
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.lang
  • Affected Version: 9
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2016-06-28
  • Updated: 2016-07-12
  • Resolved: 2016-06-29
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 9
9 b126Fixed
Related Reports
Relates :  
Relates :  
Description
VersionProps.versionNumbers() incorrectly parses a Java version string because it doesn't skip the separating dots. The current version only works for one digit versions like "9" but will fail for any longer version string like for example "9.0.0.1" with:

        at java.lang.NumberFormatException.forInputString(java.base@9.0.0.1-internal/NumberFormatException.java:65)
        at java.lang.Integer.parseInt(java.base@9.0.0.1-internal/Integer.java:791)
        at java.lang.VersionProps.versionNumbers(java.base@9.0.0.1-internal/VersionProps.java:76)
        at java.lang.Runtime.version(java.base@9.0.0.1-internal/Runtime.java:940)

This also breaks the build which uses a newly built jdk for bootstrapping:

 Generating lib/classlist
/priv/d046063/OpenJDK/output-jdk9-dev-opt/support/interim-image/bin/java -XX:DumpLoadedClassList=/priv/d046063/OpenJDK/output-jdk9-dev-opt/support/classlist/classlist.tmp \
            -cp /priv/d046063/OpenJDK/output-jdk9-dev-opt/support/classlist.jar \
            build.tools.classlist.HelloClasslist  2>&1
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.ExceptionInInitializerError
        at jdk.internal.loader.URLClassPath$JarLoader.getJarFile(java.base@9.0.0.1-internal/URLClassPath.java:697)
        at jdk.internal.loader.URLClassPath$JarLoader.access$600(java.base@9.0.0.1-internal/URLClassPath.java:586)
        at jdk.internal.loader.URLClassPath$JarLoader$1.run(java.base@9.0.0.1-internal/URLClassPath.java:642)
        at jdk.internal.loader.URLClassPath$JarLoader$1.run(java.base@9.0.0.1-internal/URLClassPath.java:635)
        at java.security.AccessController.doPrivileged(java.base@9.0.0.1-internal/Native Method)
        at jdk.internal.loader.URLClassPath$JarLoader.ensureOpen(java.base@9.0.0.1-internal/URLClassPath.java:634)
        at jdk.internal.loader.URLClassPath$JarLoader.<init>(java.base@9.0.0.1-internal/URLClassPath.java:609)
        at jdk.internal.loader.URLClassPath$3.run(java.base@9.0.0.1-internal/URLClassPath.java:389)
        at jdk.internal.loader.URLClassPath$3.run(java.base@9.0.0.1-internal/URLClassPath.java:373)
        at java.security.AccessController.doPrivileged(java.base@9.0.0.1-internal/Native Method)
        at jdk.internal.loader.URLClassPath.getLoader(java.base@9.0.0.1-internal/URLClassPath.java:372)
        at jdk.internal.loader.URLClassPath.getLoader(java.base@9.0.0.1-internal/URLClassPath.java:349)
        at jdk.internal.loader.URLClassPath.getResource(java.base@9.0.0.1-internal/URLClassPath.java:215)
        at jdk.internal.loader.BuiltinClassLoader$3.run(java.base@9.0.0.1-internal/BuiltinClassLoader.java:463)
        at jdk.internal.loader.BuiltinClassLoader$3.run(java.base@9.0.0.1-internal/BuiltinClassLoader.java:460)
        at java.security.AccessController.doPrivileged(java.base@9.0.0.1-internal/Native Method)
        at jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(java.base@9.0.0.1-internal/BuiltinClassLoader.java:459)
        at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(java.base@9.0.0.1-internal/BuiltinClassLoader.java:406)
        at jdk.internal.loader.BuiltinClassLoader.loadClass(java.base@9.0.0.1-internal/BuiltinClassLoader.java:364)
        at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(java.base@9.0.0.1-internal/ClassLoaders.java:185)
        at java.lang.ClassLoader.loadClass(java.base@9.0.0.1-internal/ClassLoader.java:419)
        at sun.launcher.LauncherHelper.loadMainClass(java.base@9.0.0.1-internal/LauncherHelper.java:587)
        at sun.launcher.LauncherHelper.checkAndLoadMain(java.base@9.0.0.1-internal/LauncherHelper.java:499)
Caused by: java.lang.NumberFormatException: For input string: ""
        at java.lang.NumberFormatException.forInputString(java.base@9.0.0.1-internal/NumberFormatException.java:65)
        at java.lang.Integer.parseInt(java.base@9.0.0.1-internal/Integer.java:791)
        at java.lang.VersionProps.versionNumbers(java.base@9.0.0.1-internal/VersionProps.java:76)
        at java.lang.Runtime.version(java.base@9.0.0.1-internal/Runtime.java:940)
        at java.util.jar.JarFile.<clinit>(java.base@9.0.0.1-internal/JarFile.java:156)
        ... 23 more
make[3]: *** [/priv/d046063/OpenJDK/output-jdk9-dev-opt/support/classlist/classlist] Error 1
make[3]: Leaving directory `/net/usr.work/d046063/OpenJDK/jdk9-dev/jdk/make'
make[2]: *** [generate-classlist] Error 1
make[2]: Leaving directory `/net/usr.work/d046063/OpenJDK/jdk9-dev'