I have come across an interesting situation. A coworker committed some changes, which would not compile on my machine neither from the IDE (Eclipse) nor from a command line (Maven). The problem manifested in the compilation process taking 100% CPU and only killing the process would help to stop it. After some analysis the cause of the problem was located and resolved. It turned out be a line “double d = 2.2250738585072012e-308” (without semicolon at the end) in one of the interfaces. The following snipped duplicates it.
public class WeirdCompilationIssue {
double d = 2.2250738585072012e-308
}
Why would compiler hang? A language edge case?
It’s a bug in the String-to-double conversion algorithm of the JVM: http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/
You can get the same hang if you try to parse that string at runtime. The compiler hangs because it uses the same code (it’s a Java program after all).
Update: the issue now has a CVE identifier (CVE-2010-4476) and a patch (for Oracle JVMs, also works on OpenJDK).
According to the patch it all boils down to an off-by-one error.