Hi,
We have found out that although something like:
public class Repro {
def "bad<_>method"() {
}
void test() {
println "Passed"
}
public static void main(String[] args) {
Repro r = new Repro()
r.test()
}
}
Will not run in groovy, groovyc will happily compile it into a
classfile. That classfile can be later executed by OpenJDK8u265 (but
not by newer versions).
The .class file generated by groovy (tested with 3.0.6) would be a
classfile with major version 52, which corresponds to JDK8. According
to the JVM spec [1], that would be an illegal name.
For what I've read in the groovy syntax, it seems that < and > (U+003C
and U+003E) are not valid in groovy either [2]
I mention this because starting with OpenJDK8, stricter checks will be
performed when loading a classfile into the JVM, and the previous
example would cause a ClassFormatError.
There is also a discussion in the jdk8u-dev mailing list about this:
https://mail.openjdk.java.net/pipermail/jdk8u-dev/2020-October/012760.html
David
---
[1]
https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.2.2
[2]
http://docs.groovy-lang.org/next/html/documentation/#_normal_identifiers
signature.asc
Description: This is a digitally signed message part
