Um simples e novo bug foi recém descoberto em todas as versões do Java. Um double d = Double.parseDouble(“2.2250738585072012e-308”); (o menor double possível) entra em loop infinito, assim como no PHP.
Ou mesmo se você escrever um código java com double d = 2.2250738585072012e-308; o compilador vai utilizar o Double.parseDouble internamente, fazendo o compilador travar em loop infinito.
Isso obviamente afeta JRuby, Scala, Clojure, etc. Pode ser também um ataque a formuários web que recebem parâmetros e convertem diretamente para Double, o que sempre pareceu ser uma operação segura.
Faça algo como System.out.printf("%.20e", Double.MIN_NORMAL);
Mas qual valor ele representa exatamente não é relevante para o bug. A fragilidade é qualquer um que converta diretamente de uma String da web para double, esta sucetivel a isso. Exemplo Double.parseDouble(req.getParameter(“valor”));
Aqui o eclipse travou também… mas acredito que foi porque eu usei esta forma:
Try to compile this program; the compiler will hang:
class compilehang {
public static void main(String[] args) {
double d = 2.2250738585072012e-308;
System.out.println("Value: " + d);
}
}
Entao fica preso na compilação… brincadeira legal para fazer com estagiário :twisted: :lol:
[quote=danilomunoz]Ops … melhor não fazerem no eclipse não …
tive que editar o código por fora (notepad) e remover a linha … pq não conseguia mais salvar pelo eclipse …
encheu um pouco o saco aqui … travou bem feio … rs.
[quote=Paulo Silveira]Um simples e novo bug foi recém descoberto em todas as versões do Java. Um double d = Double.parseDouble(“2.2250738585072012e-308”); (o menor double possível) entra em loop infinito, assim como no PHP.
[/quote]
impressionante, mas pelo jeito esse bug já tinha sido reportado desde o final de 2009: