सबसे नया सॉलिडिटी का संस्करण 0.4.25 रिलीज दो महत्वपूर्ण बग ठीक करता है। एक और महत्वपूर्ण बग पहले से ही संस्करण 0.4.22 में तय किया गया है लेकिन यह हाल ही में पता चला था कि बग मौजूद था।
ध्यान दें कि एथेरियम फाउंडेशन a चलाता है इनाम कार्यक्रम सॉलिडिटी के कोड जनरेटर भाग के लिए।
घातांक में घातांक की सफाई
- घटना की संभावना: बहुत कम
- शोषण क्षमता: उच्च
- परीक्षणों द्वारा खोजे जाने योग्य: कम
- संस्करण में फिक्स्ड: 0.4.25
सारांश: एक्सपोनेंटिएशन ऑपरेशन के एक्सपोनेंट में छोटे प्रकार का उपयोग करने से अमान्य परिणाम हो सकते हैं।
सॉलिडिटी भाषा पूर्णांक प्रकारों की अनुमति देती है जो 256 बिट्स से कम हैं, भले ही एथेरियम वर्चुअल मशीन केवल 256 बिट्स के प्रकारों को ही जानती है। उसके कारण, उच्च क्रम बिट्स को समय-समय पर शून्य पर सेट करने की आवश्यकता होती है। कई परिचालनों के लिए, यह प्रासंगिक नहीं है कि उन बिट्स को शून्य पर सेट किया गया है या नहीं (जोड़ एक उदाहरण है)। इस वजह से, सॉलिडिटी कंपाइलर इस सफाई में तब तक देरी करता है जब तक कि गैस बचाने के लिए इसकी आवश्यकता न हो।
विशेष परिस्थिति में कि के प्रतिपादक ** ऑपरेटर का एक प्रकार है जो 256 बिट्स से छोटा है, लेकिन आधार के प्रकार से छोटा नहीं है और इसमें गंदे उच्च क्रम बिट्स हैं, इससे गलत परिणाम हो सकता है। ध्यान दें कि शाब्दिक प्रतिपादक पसंद करते हैं एक्स ** 2 साथ ही वह मामला जहां आधार का प्रकार है uint256 या int256 अप्रभावित हैं।
ध्यान दें कि किसी दुर्भावनापूर्ण इकाई द्वारा बुलाए जाने पर फ़ंक्शन पैरामीटर में गंदे उच्च क्रम बिट्स हो सकते हैं, और दुर्भावनापूर्ण संस्थाओं द्वारा तैनात अनुबंधों के कार्यों से लौटाए गए डेटा के लिए भी यही सच है।
बड़ी संख्या में अनुबंधों की जांच करने के बाद, हम मानते हैं कि यह बग केवल बहुत कम संख्या में स्मार्ट अनुबंधों को प्रभावित करता है, यदि कोई हो, क्योंकि एक्सपोनेंटिएशन ऑपरेटर के नियमित उपयोग से बग नहीं होता है।
यह बग द्वारा खोजा गया था निवासी.
मल्टी-डायमेंशनल ऐरे डिकोडर में मेमोरी करप्शन
- घटना की संभावना: कम
- शोषणशीलता: मध्यम
- परीक्षणों द्वारा खोजे जाने योग्य: उच्च
- संस्करण में पेश किया गया: 0.1.4
- संस्करण में फिक्स्ड: 0.4.22
सारांश: बहु-आयामी निश्चित-आकार सरणियों को वापस करने वाले अन्य अनुबंधों के कॉलिंग फ़ंक्शन के परिणामस्वरूप स्मृति भ्रष्टाचार होता है।
यदि सॉलिडिटी कोड एक फ़ंक्शन को कॉल करता है जो एक बहु-आयामी निश्चित-आकार की सरणी देता है, तो लौटाए गए एबीआई-एन्कोडेड डेटा को सॉलिडिटी के सरणियों के आंतरिक प्रतिनिधित्व में परिवर्तित करना होगा। सॉलिडिटी में, बहु-आयामी सरणियों को मेमोरी पॉइंटर्स के सरणियों के रूप में लागू किया जाता है, जबकि एबीआई में डेटा को इनलाइन इनकोड किया जाता है। डिकोडर ने इस अंतर को ध्यान में नहीं रखा, जिसके परिणामस्वरूप लौटाए गए तत्वों को मेमोरी पॉइंटर्स के रूप में व्याख्या किया जाता है और इस प्रकार रिटर्न मूल्यों तक पहुंचने पर स्मृति भ्रष्टाचार का कारण बन सकता है। बहु-आयामी निश्चित-आकार सरणी तर्कों के साथ कॉलिंग फ़ंक्शन अप्रभावित है क्योंकि फ़ंक्शन कॉल से निश्चित-आकार के सरणी वापस कर रहे हैं यदि वे सॉलिडिटी अनुबंध में उपयोग नहीं किए जाते हैं। बग केवल उस घटक में है जो एक बहु-आयामी निश्चित-आकार की सरणी को डिकोड करता है जो कि सॉलिडिटी से फ़ंक्शन कॉल से लौटाया जाता है।
यह बग द्वारा खोजा गया था jmahhh.
घटनाओं में संरचनाओं का अमान्य एन्कोडिंग
- घटना की संभावना: कम
- शोषण क्षमता: कम
- परीक्षणों द्वारा खोजे जाने योग्य: उच्च
- संस्करण में पेश किया गया: 0.4.17
- संस्करण में फिक्स्ड: 0.4.25
सारांश: इवेंट पैरामीटर के रूप में स्ट्रक्चर्स को ठीक से हैंडल नहीं किया जाता है।
नए एबीआई एनकोडर के बिना स्ट्रक्चर्स को इवेंट पैरामीटर के रूप में समर्थित करने के लिए नहीं बनाया गया था। कंपाइलर ने उन्हें फिर भी स्वीकार किया, लेकिन उनके वास्तविक मूल्य के बजाय उनके मेमोरी एड्रेस को एनकोड किया। नए एबीआई एनकोडर के साथ भी, स्ट्रक्चर्स नहीं हो सकते अनुक्रमित घटना पैरामीटर।
अब, पुराने एनकोडर के लिए स्ट्रक्चर्स को ठीक से अस्वीकृत कर दिया गया है और यदि उन्हें नए एनकोडर के लिए भी अनुक्रमित किया गया है।