BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Oracle发布补丁,修复Double.parseDouble Bug

| 作者 Charles Humble 关注 904 他的粉丝 ,译者 张龙 关注 14 他的粉丝 发布于 2011年2月23日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

近日,Oracle发布了一个名为FPUpdater的补丁程序,用于修复Java平台上存在了10年之久的Bug,恶意用户可以利用该Bug向服务器发起拒绝服务攻击。时隔这么多年才发布,该补丁程序可谓是打破了记录。

们可以使用该补丁工具手工修复Java实例,比如Java服务器。该补丁适用于Oracle所维护的所有受影响的Java版本。根据FPUpdater发布声明所述,推荐将该FPUpdater工具应用于下表所示的Oracle JRE版本:

JRE/JDK版本 说明
J2SE 1.4.2 1.4.2_29及之前的版本需要升级
J2SE 5.0 5.0u27及之前的版本需要升级
J2SE for Embedded 5.0 5.0u27及之前的版本需要升级
Java SE 6 6u23及之前的版本需要升级
Java SE for Embedded 6 6u23及之前的版本需要升级
Java Real-Time System 2 2.2u1及之前的版本需要升级
JRockit R27 R27.6.8及之前的版本需要升级
JRockit R28 R28.1.1及之前的版本需要升级

Oracle还发布了一个针对OpenJDK的源代码修复。我们期待Oracle在未来几天通过Java的自动更新发布Critical Patch Update,但目前InfoQ还无法证实这一点。

该Bug源自于以二进制格式表示某些浮点数时所遇到的困难,在将十进制数2.2250738585072012e-308转换为双精度的二进制浮点数时,该Bug会导致Java运行时和编译器进入到死循环当中。但该Bug与Rick Regan所发现的PHP中的类似问题却并不一样。Java的这个Bug是由Konstantin Prei?er再次发现并由Regan记录下来的。根据Regan的分析

正常情况下,该数字会转换为0x1p-1022,这是DBL_MIN;但Java却出现了问题,导致在0x1p-1022和0x0.fffffffffffffp-1022之间来回变换,而后者则是最大的低于正常的双精度浮点数。

有人在2001年就发现了该问题,但在最初的Bug报告中却被归为低优先级的Bug。它还有可能影响到其他的Java版本。比如说,InfoQ就在Apple最新的OS X版本的Java上重现了该Bug,但到目前为止,其他Java厂商的反应速度却远远落后于Oracle。

查看英文原文:Oracle发布补丁,修复Double.parseDouble Bug

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT