Grave bug encontrado em conversão de String->Double em PHP aparece na JVM  XML
Índice dos Fóruns » Notícias
Autor Mensagem
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

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.

Mais informações:
http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/

Testei na JVM do Mac e o mesmo ocorre. O código "que ofende" é esse aqui:
http://google.com/codesearch/p?hl=en#lM3pwaU8RUc/src/share/classes/sun/misc/FloatingDecimal.java&q=parseDouble&l=1476

Não há respostas da Oracle até o momento. Agradecimentos ao @rlucindo

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
zoren
GUJ Master
[Avatar]

Membro desde: 30/06/2008 08:32:33
Mensagens: 1007
Offline

Se colar essa linha no netbeans ele trava.



Mas eu não vi esse bug com o:


e ainda dá um valor direfente.

só agora que eu vi, tem o MIN_NORMAL, mas o valor é bem próximo, mas ainda não é esse.



This message was edited 2 times. Last update was at 01/02/2011 14:54:53

[Email] [MSN]
Sergio Lopes
Moderador
[Avatar]

Membro desde: 17/11/2003 00:22:10
Mensagens: 1368
Localização: São Paulo - SP
Offline

O bug é só no parseDouble. Se você usa a constante diretamente não há chamada ao parseDouble.

Sérgio Lopes - twitter: @sergio_caelum - blog pessoal: sergiolopes.org
Curso Java | Apostilas Java | Arquitetura Java | Curso Rails
zoren
GUJ Master
[Avatar]

Membro desde: 30/06/2008 08:32:33
Mensagens: 1007
Offline

Sergio Lopes wrote:O bug é só no parseDouble. Se você usa a constante diretamente não há chamada ao parseDouble.


Mas os valores não são os mesmos.

Só próximos.
[Email] [MSN]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

é um antes do Double.MIN_NORMAL, algo assim.

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"));

This message was edited 1 time. Last update was at 01/02/2011 15:11:21


http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
danilomunoz
JavaChild
[Avatar]
Membro desde: 28/03/2006 10:02:27
Mensagens: 128
Localização: Itatiba - SP
Offline

O meu eclipse tbm deu deadlock, mas é só dar stop nos processos de compilação.

Danilo Rosetto Muñoz
SCJP 5.0
http://br.linkedin.com/in/danilomunoz
PROJETO MARVIN - http://marvinproject.org
[WWW] [MSN]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Travou o eclipse também.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
danilomunoz
JavaChild
[Avatar]
Membro desde: 28/03/2006 10:02:27
Mensagens: 128
Localização: Itatiba - SP
Offline

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.

Até mais,

Danilo Rosetto Muñoz
SCJP 5.0
http://br.linkedin.com/in/danilomunoz
PROJETO MARVIN - http://marvinproject.org
[WWW] [MSN]
Jose111
JavaGuru
[Avatar]

Membro desde: 06/04/2009 13:20:32
Mensagens: 211
Localização: Depois do System.exit(0);
Offline

Aqui o eclipse travou também... mas acredito que foi porque eu usei esta forma:


Entao fica preso na compilação... brincadeira legal para fazer com estagiário

vocedeviaestarprogramando
[MSN]
Mauricio de Mello
Java Ninja

Membro desde: 30/01/2007 14:49:22
Mensagens: 296
Localização: Florianópolis
Offline

No php a coisa é mais feia entao pelo o cast ser automático?
Diabo Loiro
GUJ Master
[Avatar]
Membro desde: 24/03/2009 07:46:14
Mensagens: 1040
Localização: Praia Grande - SP
Offline

mto louco o cara que descobriu isso... quem vai usar um double dessa forma hehe

kkkkkk

This message was edited 1 time. Last update was at 01/02/2011 16:00:11


Sun Certified Java Associate
Sun Certified Java Programer 6.0
Sun Certified Web Component Developer
Oracle Certified Professional, Java EE 5 Business Component Developer

Blog
http://brunodanielmarinho.wordpress.com

Fals - Osum Leader
http://osum.sun.com/group/fals


Kanin Dragon
Virtual Machine Man
[Avatar]

Membro desde: 01/02/2011 12:46:04
Mensagens: 682
Localização: Depende
Offline

Ai sim fomos surpreendidos novamente.!

http://www.guj.com.br/java/244602-calunia-desabafo

Dragão Torpente
Shidoshi Ninjutsu

Engenharia Eletrônica - ITA
Mestrado Engenharia Eletrica - UFRJ
Futuramente Doutorado - Harvard

SCJP 5
SCWCD 5
SCJD
SCBCD
SCDJWS
SCEA

Não respondo dúvidas via MP. Não seja egoista e abra um tópico.
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

danilomunoz wrote: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.

Até mais,


Tive que fazer isso também.

Cuidado.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
Diabo Loiro
GUJ Master
[Avatar]
Membro desde: 24/03/2009 07:46:14
Mensagens: 1040
Localização: Praia Grande - SP
Offline

show de bola esse bug.

Sun Certified Java Associate
Sun Certified Java Programer 6.0
Sun Certified Web Component Developer
Oracle Certified Professional, Java EE 5 Business Component Developer

Blog
http://brunodanielmarinho.wordpress.com

Fals - Osum Leader
http://osum.sun.com/group/fals


drigo.angelo
Virtual Machine Man
[Avatar]

Membro desde: 19/11/2009 12:17:08
Mensagens: 744
Localização: Uberlândia - MG
Offline

Então #comofaz agora? toda vez que tiver uma entrada de um valor double do usuário vou ter que validar??

@drigoangelo

IE6 no more
[Email] [MSN]
 
Índice dos Fóruns » Notícias
Ir para:   
Powered by JForum 2.1.8 © JForum Team