RFR: JDK-8062359: javac Attr crashes with NPE in TypeAnnotationsValidator visitNewClass
Joel Borggrén-Franck
joel.franck at oracle.com
Tue Nov 18 10:41:47 UTC 2014
Hi,
Here is a proposed fix for [1]: javac Attr crashes with NPE in TypeAnnotationsValidator visitNewClass
This is for 9 but I will propose an identical backport to 8u as well. Patch is very small:
diff -r c2339b4749af src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Mon Nov 17 23:11:05 2014 -0800
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Tue Nov 18 10:23:57 2014 +0100
@@ -4486,14 +4486,16 @@
super.visitTypeTest(tree);
}
public void visitNewClass(JCNewClass tree) {
- if (tree.clazz.hasTag(ANNOTATED_TYPE)) {
- checkForDeclarationAnnotations(((JCAnnotatedType) tree.clazz).annotations,
- tree.clazz.type.tsym);
- }
- if (tree.def != null) {
- checkForDeclarationAnnotations(tree.def.mods.annotations, tree.clazz.type.tsym);
- }
- if (tree.clazz.type != null) {
+ if (tree.clazz != null && tree.clazz.type != null) {
+ if (tree.clazz.hasTag(ANNOTATED_TYPE)) {
+ checkForDeclarationAnnotations(((JCAnnotatedType) tree.clazz).annotations,
+ tree.clazz.type.tsym);
+ }
+
+ if (tree.def != null) {
+ checkForDeclarationAnnotations(tree.def.mods.annotations, tree.clazz.type.tsym);
+ }
+
validateAnnotatedType(tree.clazz, tree.clazz.type);
}
super.visitNewClass(tree);
— 8< —
I can’t reproduce the issue, but as the initial report (CC:ed) wrote, and as nearby methods hint at, tree.clazz.type can be null which may NPE in the second if clause guarded by tree.def != null.
My proposed fix is to add guards similar to visitTypeCast or visitTypeTest. There is no test since I can’t reproduce this, but the existing langtools regression tests pass, and I have run a jcov report that at least shows the method has good coverage by the existing tests.
If anyone is able to reproduce this I would be glad if you tried out the patch.
thanks in advance
cheers
/Joel
[1] https://bugs.openjdk.java.net/browse/JDK-8062359
More information about the compiler-dev
mailing list