O título deste artigo deveria ser algo relacionado à bug, porém seria difícil demais para as pessoas acreditarem que teria um bug no Java, portanto, estamos chamaremos apenas de loop infinito espontâneo.
O problema acontece quando se tenta utilizar o menor double possível, o que faz com que o programa entre em loop infinito. O mesmo bugproblema, ocorre no PHP.
Ou seja, sempre que você atribuir à um tipo double o valor 2.2250738585072012e-308 (DBL_MIN) o compilador vai utilizar o Double.parseDouble internamente, fazendo o compilador travar pois entrará em loop infinito.
Exemplos prático:
Derrubar um Programa Java
class DerrubaPrograma { public static void main(String[] args) { System.out.println("Teste:"); double d = Double.parseDouble("2.2250738585072012e-308"); System.out.println("Valor: " + d); } }
Derrubar toda JVM
class DerrubaJVM{ public static void main(String[] args) { double d = 2.2250738585072012e-308; System.out.println("Valor: " + d); } }
Já foi aberto um chamado na Oracle para correção do problema. Esperamos que ninguém mal intencionado utilize este problema para explorar falhas em programas Java.
Este artigo tem finalidade informativa apenas, não nos responsabilizamos e nem recomendamos a utilização da vulnerabilidade apresentada.
Fonte:
http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/
não entendi esse double 2.2250738585072012e-308
e-308 ? uma letra?
Significa elevado a -308, é uma notação válida.