2011-02-04 16 views
7

के साथ कक्षा के लिए लटकता है मैं एक दिलचस्प स्थिति में आया हूं। एक सहकर्मी ने कुछ बदलाव किए, जो मेरी मशीन पर न तो आईडीई (ग्रहण) से और न ही कमांड लाइन (मेवेन) से संकलित नहीं होंगे। संकलन प्रक्रिया में 100% सीपीयू लेने और केवल प्रक्रिया को मारने में समस्या को रोकने में समस्या इसे रोकने में मदद करेगी। कुछ विश्लेषण के बाद समस्या का कारण स्थित और हल किया गया था। यह इंटरफेस में से एक में "डबल डी = 2.2250738585072012e-308" (अंत में अर्धविराम के बिना) एक पंक्ति बन गया। निम्नलिखित इसे डुप्लिकेट करता है।संकलन फ़ील्ड डबल डी = 2.2250738585072012e-308

public class WeirdCompilationIssue { 
    double d = 2.2250738585072012e-308 
} 

संकलक क्यों लटकाएगा? एक भाषा एज केस?

+0

वैसे: इससे कोई फर्क नहीं पड़ता कि संख्या के बाद अर्धविराम है या नहीं। यह 'डबल' शाब्दिक का अंकीय मूल्य है जो समस्या है। –

+0

इंटेलिज आईडीईए में भी ऐसा ही होता है। एक एसडीके बग होना चाहिए। –

+4

2.2250738585072012e-308 के लिए गुगलिंग ने आपको बहुत सारे जवाब दिए होंगे। – ordnungswidrig

उत्तर

16

यह JVM की स्ट्रिंग करने वाली डबल रूपांतरण एल्गोरिथ्म में एक बग है: http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/

यदि आप रनटाइम पर कि स्ट्रिंग पार्स करने की कोशिश में एक ही लटका मिल सकता है। कंपाइलर लटकता है क्योंकि यह एक ही कोड का उपयोग करता है (यह सब के बाद एक जावा प्रोग्राम है)।

अद्यतन: मुद्दा अब एक CVE पहचानकर्ता (CVE-2010-4476) और a patch है (Oracle JVMs के लिए, यह भी OpenJDK पर काम करता है)।

the patch के अनुसार यह सब एक-एक-एक त्रुटि के लिए उबाल जाता है।

+4

जब कोई सेवा जेएसओएन स्वीकार करती है तो यह एक सुरक्षा समस्या भी है (सर्वर से इनकार)। एक जेसन दस्तावेज़ भेजना जैसे: {x: 2.2250738585072012e-308} एक वेब संसाधन पर जो एक JSON दस्तावेज़ की अपेक्षा कर रहा है वह पार्स पर लटका होगा। – ordnungswidrig

+3

यह सहकर्मी वास्तव में मजाकिया लड़का है ... निर्माण को मारने का अच्छा तरीका। –

+2

@Andreas_D: ओह हाँ, अगर यह स्पष्ट नहीं था: संभावना है कि आप सह-कार्यकर्ता * गलती से उस संख्या में जांच नहीं करते थे। –

5

यह एक ज्ञात मुद्दा है जो कुछ दिनों पहले समाचार में था। अधिक जानकारी here

3

यह 10 से अधिक वर्षों के लिए एक खुली बग है। बुरा सूर्य

तथ्य यह है कि जावा सिस्टम पर हमला नहीं किया गया है और जनता में मरे हुए हैं यह साबित करता है कि पृथ्वी पर बहुत कम शरारती लोग हैं।

+1

कल्पना कीजिए कि यह परमाणु रिएक्टर में हुआ था: डी लेकिन फिर, आप इसके लिए जावा का उपयोग नहीं करेंगे। शायद नियंत्रण के लिए सिस्टम। –