ออราเคิลออกประกาศ Security Alert for CVE-2010-4476 พร้อมโปรแกรมแก้ไขบัก
ซึ่งเป็นบักในส่วนการแปลงข้อความตัวอักษรเลขฐาน 10 ไปเป็นเลขฐาน 2 จำนวนจริงแบบความละเอียดสองเท่า (double-precision binary floating-point) ที่เมื่อเจอเลข 2.2250738585072012e-308 จะวนติดอยู่ในลูปและไม่สามารถทำงานคำสั่งถัดไปได้
บักนี้ร้ายขนาดไหน? ยกตัวอย่างง่ายๆ ก็ทำให้โปรแกรมอย่าง "javac" ค้างได้ รายละเอียดลองอ่าน "Java Hangs When Converting 2.2250738585072012e-308" ดู
Comments
ผมคิดว่าถ้ามีตัวอย่างโค๊ดที่เคยเป็นปัญหาด้วย น่าจะทำให้อ่านเข้าใจง่ายขึ้นนะครับ (ตอนแรกงงตรงการแปลงตัวอักษรเป็นทศนิยมลอยตัว หรืออะไรสักอย่างนี่ล่ะ :P) คิดว่าไม่น่าจะใช้พื้นที่มากนะ
ตรง Java Hangs When Converting... นั่นมีตัวอย่างครับ แต่ไม่กล้าเอามาใส่ เพราะจะเรียกว่า "เคยเป็นปัญหา" ก็ยังได้ไม่เต็มปาก เชื่อว่าเกินครึ่งโลกตอนนี้ยังไม่ได้ patch ครับ เลยไม่อยากใส่ให้เห็นชัดเกินไปนัก
คือบั๊กมันง่ายแต่ได้ผลมาก เพราะ parseDouble ด้วย แถมเดี๋ยวนี้อาจจะไม่ใช้การแปลงตรงๆ แต่ข้างใต้เฟรมเวิร์กทั่วไปก็ใช้ BeanUtils หรือตัวแปลงค่าอื่นๆแปลงค่าฟอร์มที่ผู้ใช้กรอกลง Object กันเยอะนะครับ
แบบนี้สงสัยอาจจะมีผลกระทบมากกว่าที่คิดนะ thread มันไม่จบเสียที โดนเยอะๆก็ดาว์นได้ล่ะ
บักตัวเดียวกับใน PHP สินะ แต่ทางโน้นแก้ไปเป็นเดือนแล้วนะ
oracle ทำดีแล้วครับ