Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8339344

Fix NullPointerException in ModuleRequireInfo after adding null check

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P3 P3
    • 24
    • 24
    • core-libs
    • None

      Additional information

      javac -fullversion
      javac full version "24-internal-2024-08-26-....

      Description of the problem

      While doing some work around ClassFile API, I ran into a NullPointerException after adding a null check to `ModuleRequireInfo of(ModuleEntry requires, int requiresFlags, Utf8Entry requiresVersion)` on `requiresVersion`

      Github link: https://github.com/openjdk/jdk/blob/b840b130df7ccb64d4615460c0654a6315e9302f/src/java.base/share/classes/java/lang/classfile/attribute/ModuleRequireInfo.java#L89

      The issue stems from BoundAttribute.java, where you find this piece of code
      ```
      ModuleRequireInfo.of(classReader.readEntry(p, ModuleEntry.class),
                                  classReader.readU2(p + 2),
                                  classReader.readEntryOrNull(p + 4, Utf8Entry.class)
      ```

      Github link: https://github.com/openjdk/jdk/blob/b840b130df7ccb64d4615460c0654a6315e9302f/src/java.base/share/classes/jdk/internal/classfile/impl/BoundAttribute.java#L644

      `readEntryOrNull` is Optional and returns null

      The build breaks after adding the null check with the following error

      Creating jdk.jlink.jmod
      Error: null
      java.lang.NullPointerException
              at java.base/java.util.Objects.requireNonNull(Objects.java:220)
              at java.base/java.lang.classfile.attribute.ModuleRequireInfo.of(ModuleRequireInfo.java:92)
              at java.base/jdk.internal.classfile.impl.BoundAttribute$BoundModuleAttribute.structure(BoundAttribute.java:642)
              at java.base/jdk.internal.classfile.impl.BoundAttribute$BoundModuleAttribute.requires(BoundAttribute.java:597)
              at java.base/jdk.internal.module.ModuleInfoExtender.lambda$toByteArray$2(ModuleInfoExtender.java:192)
              at java.base/jdk.internal.classfile.impl.TransformImpl.lambda$resolve$2(TransformImpl.java:70)
              at java.base/jdk.internal.classfile.impl.ChainedClassBuilder.with(ChainedClassBuilder.java:52)
              at java.base/jdk.internal.classfile.impl.ChainedClassBuilder.with(ChainedClassBuilder.java:35)
              at java.base/java.lang.classfile.ClassTransform$2.accept(ClassTransform.java:85)
              at java.base/java.lang.classfile.ClassTransform$2.accept(ClassTransform.java:80)
              at java.base/jdk.internal.classfile.impl.TransformImpl.lambda$resolve$2(TransformImpl.java:70)
              at java.base/jdk.internal.classfile.impl.ClassImpl.forEach(ClassImpl.java:173)
              at java.base/java.lang.classfile.ClassFileBuilder.transform(ClassFileBuilder.java:88)
              at java.base/jdk.internal.classfile.impl.ClassFileImpl$2.accept(ClassFileImpl.java:144)
              at java.base/jdk.internal.classfile.impl.ClassFileImpl$2.accept(ClassFileImpl.java:139)
              at java.base/jdk.internal.classfile.impl.ClassFileImpl.build(ClassFileImpl.java:129)
              at java.base/jdk.internal.classfile.impl.ClassFileImpl.transformClass(ClassFileImpl.java:138)
              at java.base/java.lang.classfile.ClassFile.transformClass(ClassFile.java:450)
              at java.base/jdk.internal.module.ModuleInfoExtender.toByteArray(ModuleInfoExtender.java:156)
              at jdk.jlink/jdk.tools.jmod.JmodTask$JmodFileWriter.writeModuleInfo(JmodTask.java:604)
              at jdk.jlink/jdk.tools.jmod.JmodTask$JmodFileWriter.write(JmodTask.java:487)
              at jdk.jlink/jdk.tools.jmod.JmodTask.create(JmodTask.java:444)
              at jdk.jlink/jdk.tools.jmod.JmodTask.run(JmodTask.java:198)
              at jdk.jlink/jdk.tools.jmod.Main.main(Main.java:35)
      CreateJmods.gmk:251: recipe for target '/jdk-cf/build/macosx-aarch64/support/images/jmods/_create_jdk.jlink.jmod_exec.marker' failed
      make[3]: *** [/jdk-repos/jdk-cf/build/macosx-aarch64/support/images/jmods/_create_jdk.jlink.jmod_exec.marker] Error 4
      make/Main.gmk:397: recipe for target 'jdk.jlink-jmod' failed
      make[2]: *** [jdk.jlink-jmod] Error 2
      make[2]: *** Waiting for unfinished jobs....

      ERROR: Build failed for targets 'jdk-image docs-jdk' in configuration 'macosx-aarch64' (exit code 2)
      Stopping javac server

      === Output from failing command(s) repeated here ===
      * For target support_images_jmods__create_jdk.jlink.jmod_exec:
      Error: null
      java.lang.NullPointerException
              at java.base/java.util.Objects.requireNonNull(Objects.java:220)
              at java.base/java.lang.classfile.attribute.ModuleRequireInfo.of(ModuleRequireInfo.java:92)
              at java.base/jdk.internal.classfile.impl.BoundAttribute$BoundModuleAttribute.structure(BoundAttribute.java:642)
              at java.base/jdk.internal.classfile.impl.BoundAttribute$BoundModuleAttribute.requires(BoundAttribute.java:597)
              at java.base/jdk.internal.module.ModuleInfoExtender.lambda$toByteArray$2(ModuleInfoExtender.java:192)
              at java.base/jdk.internal.classfile.impl.TransformImpl.lambda$resolve$2(TransformImpl.java:70)
              at java.base/jdk.internal.classfile.impl.ChainedClassBuilder.with(ChainedClassBuilder.java:52)
              at java.base/jdk.internal.classfile.impl.ChainedClassBuilder.with(ChainedClassBuilder.java:35)
              at java.base/java.lang.classfile.ClassTransform$2.accept(ClassTransform.java:85)
              at java.base/java.lang.classfile.ClassTransform$2.accept(ClassTransform.java:80)
              at java.base/jdk.internal.classfile.impl.TransformImpl.lambda$resolve$2(TransformImpl.java:70)
              at java.base/jdk.internal.classfile.impl.ClassImpl.forEach(ClassImpl.java:173)
              at java.base/java.lang.classfile.ClassFileBuilder.transform(ClassFileBuilder.java:88)
         ... (rest of output omitted)

            liach Chen Liang
            nbenalla Nizar Benalla
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: