JDK-8130493 : javac silently ignores malformed annotation processor class
  • Type: Bug
  • Component: tools
  • Sub-Component: javac
  • Affected Version: 8u45,9
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • Submitted: 2015-07-06
  • Updated: 2019-06-12
  • Resolved: 2019-06-12
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.
Other
tbd_majorResolved
Related Reports
Duplicate :  
Relates :  
Relates :  
Description
javac silently swallows malformed class files in an annotation processor and returns with exit code 0. Instead, javac should report the error and return with an non-0 exit code.

dsimon@kurz ~/JDK-8130493> java -version
java version "1.9.0-ea"
Java(TM) SE Runtime Environment (build 1.9.0-ea-b59)
Java HotSpot(TM) 64-Bit Server VM (build 1.9.0-ea-b59, mixed mode)
dsimon@kurz ~/JDK-8130493> javac *.java
dsimon@kurz ~/JDK-8130493> java SilentProcessor
dsimon@kurz ~/JDK-8130493> javac -processorpath ap.jar -implicit:none Annotated.java
running SilentProcessor on [Silent]
running SilentProcessor on []
dsimon@kurz ~/JDK-8130493> java SilentProcessor truncate
dsimon@kurz ~/JDK-8130493> javac -processorpath ap.jar -implicit:none Annotated.java
dsimon@kurz ~/JDK-8130493> echo $status
0
dsimon@kurz ~/JDK-8130493> javac -verbose -processorpath ap.jar -implicit:none Annotated.java
[parsing started RegularFileObject[Annotated.java]]
[parsing completed 15ms]
[search path for source files: .]
[search path for class files: JRT_MARKER_FILE,/Library/Java/JavaVirtualMachines/jdk1.9.0.jdk/Contents/Home/lib/jfxrt.jar,.]
[loading [/java.base/java/lang/Object.class]]
[loading [/java.base/java/lang/String.class]]
[loading RegularFileObject[./Silent.class]]
[loading [/java.base/java/lang/annotation/Annotation.class]]
Round 1:
	input files: {Annotated}
	annotations: [Silent]
	last round: false
[total 152ms]
dsimon@kurz ~/JDK-8130493> echo $status
0
dsimon@kurz ~/JDK-8130493> javac -XDdev -processorpath ap.jar -implicit:none Annotated.java
com.sun.tools.javac.util.Abort: java.lang.ClassFormatError: Truncated class file
	at com.sun.tools.javac.processing.JavacProcessingEnvironment$ServiceIterator.next(JavacProcessingEnvironment.java:377)
	at com.sun.tools.javac.processing.JavacProcessingEnvironment$ServiceIterator.next(JavacProcessingEnvironment.java:338)
	at com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:609)
	at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:700)
	at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2000(JavacProcessingEnvironment.java:93)
	at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1023)
	at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1130)
	at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1141)
	at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:832)
	at com.sun.tools.javac.main.Main.compile(Main.java:252)
	at com.sun.tools.javac.main.Main.compile(Main.java:141)
	at com.sun.tools.javac.Main.compile(Main.java:56)
	at com.sun.tools.javac.Main.main(Main.java:42)
Caused by: java.lang.ClassFormatError: Truncated class file
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:759)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:370)
	at com.sun.tools.javac.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:254)
	at com.sun.tools.javac.util.ServiceLoader$1.next(ServiceLoader.java:336)
	at com.sun.tools.javac.processing.JavacProcessingEnvironment$ServiceIterator.next(JavacProcessingEnvironment.java:372)
	... 12 more
dsimon@kurz ~/JDK-8130493> echo $status
0
Comments
Test case now produces an error, "Could not load processor class file due to 'Truncated class file'."
12-06-2019

This issue (JDK-8130493) looks to be a dup of JDK-8218152.
10-06-2019

I've attached a patch for jdk8u in JDK-8130493.diff
07-11-2018

Jan points out that there is a long standing bug in java.util.ServiceLoader where it doesn't wrap linkage errors. We'll look at fixing this for JDK 12 although there is a small compatibility impact to changing long standing behavior.
13-10-2018