BLOGTIMES
2011/02/10

浮動小数点変換バグはJavaにもあった

  php  java  cve  PoC 
このエントリーをはてなブックマークに追加

先日、PHPで特定の浮動小数点数を入力するとハングするという問題*1*2があって、急遽アップデート版が出たりとかしてちょっとした騒ぎになりました。

<?php $d = 2.2250738585072011e-308;

これと同じような問題がJavaにもあった模様。
 ・Security Alert For CVE-2010-4476 Released (The Oracle Global Product Security Blog)
 ・Java Hangs When Converting 2.2250738585072012e-308 - Exploring Binary

確かに、下記のようなコード実行すると、fooを出力してそのまま固まってしまいますね。
ウェブアプリなんかで、外部からの入力をDoubleに変換してるところがあったりすると目も当てられないかも。

class Hoge { public static void main(String[] args){ System.out.println("foo"); Double.parseDouble("2.2250738585072012e-308"); System.out.println("bar"); } }

PHPとJavaでは一番最後の数字が1違いますが、これがどのような境界値なのかというのはちょっと興味があります。
今はちょっとこういうことにうつつを抜かしているわけにはいかないので、懸案が片付いたらいろいろ調べてみたいと思います。


トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/4062
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
shiro (2011/02/11 16:38) <%HatenaAuth()%>

最小の正規化数と、最大の非正規化数のちょうど間に入る数値です。
http://blog.practical-schem...

Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン