Das neueste Version 0.4.25 Freisetzung der Solidität Behebt zwei wichtige Fehler. Ein weiterer wichtiger Fehler wurde bereits in Version 0.4.22 behoben, aber erst kürzlich wurde festgestellt, dass der Fehler existierte.
Beachten Sie, dass die Ethereum Foundation a ausführt Kopfgeldprogramm Für den Codegenerator Teil der Solidität.
Säuberung von Exponenten bei der Exponentiation
- Wahrscheinlichkeit des Auftretens: sehr niedrig
- Ausnutzbarkeit: Hoch
- Entdeckbarkeit durch Tests: niedrig
- In der Version behoben: 0.4.25
Zusammenfassung: Die Verwendung von kurzen Typen im Exponenten eines Exponentiationsvorgangs kann zu ungültigen Ergebnissen führen.
Die Solidity -Sprache ermöglicht ganzzahlige Typen, die kürzer als 256 Bit sind, obwohl die virtuelle Maschine von Ethereum nur Arten von genau 256 Bit kennt. Aus diesem Grund müssen Bits höherer Ordnung von Zeit zu Zeit auf Null gesetzt werden. Für viele Operationen ist es nicht relevant, ob diese Bits auf Null gesetzt sind oder nicht (Addition ist ein Beispiel). Aus diesem Grund verzögert der Solidity Compiler diese Bereinigung, bis sie benötigt wird, um Gas zu sparen.
Unter den besonderen Umständen, dass der Exponent der ** Der Bediener hat einen Typ, der kürzer als 256 Bit ist, aber nicht kürzer als der Typ der Basis und enthält schmutzige Bits höherer Ordnung. Dies kann zu einem falschen Ergebnis führen. Beachten Sie, dass wörtliche Exponenten wie in x ** 2 sowie der Fall, in dem sich die Art der Basis befindet Uint256 oder INT256 sind nicht betroffen.
Beachten Sie, dass ein Funktionsparameter schmutzige Bits höherer Ordnung haben kann, wenn sie von einer böswilligen Entität aufgerufen werden, und dies gilt für Daten, die aus Funktionen von Verträgen zurückgegeben werden, die von böswilligen Entitäten eingesetzt werden.
Nachdem wir eine große Anzahl von Verträgen überprüft haben, halten wir diesen Fehler als nur eine sehr kleine Anzahl von intelligenten Verträgen aus, wenn überhaupt, da die reguläre Verwendung des Exponentiationsbetreibers nicht zum Fehler führt.
Dieser Fehler wurde von gefunden von NWWER.
Speicherbeschäftigung im mehrdimensionalen Array-Decoder
- Wahrscheinlichkeit des Auftretens: niedrig
- Ausnutzbarkeit: Medium
- Entdeckbarkeit durch Tests: hoch
- Einführung in Version: 0.1.4
- In der Version behoben: 0.4.22
Zusammenfassung: Aufrufen von Funktionen anderer Verträge, die mehrdimensionale Arrays mit fester Größe zurückgeben, führt zu einer Speicherbeschädigung.
Wenn Soliditätscode eine Funktion aufruft, die ein multidimensionales Array mit fester Größe zurückgibt, muss die zurückgegebenen abi-codierten Daten in die interne Darstellung von Solidität umgewandelt werden. Bei Solidität werden mehrdimensionale Arrays als Arrays von Speicherzeiger implementiert, während in der ABI die Daten inline codiert werden. Der Decoder hat diesen Unterschied nicht mit dem Ergebnis berücksichtigt, dass die zurückgegebenen Elemente als Speicherzeiger interpretiert werden und somit Speicherversorgung verursachen können, wenn die Rückgabestalte zugegriffen werden. Das Aufrufen von Funktionen mit mehrdimensionalen Argumenten mit Array-Array mit fester Größe ist nicht betroffen, da die Rückgabe von Arrays mit fester Größe von Funktionsaufrufen zurückgegeben wird, wenn sie nicht in einem Soliditätsvertrag verwendet werden. Der Fehler befindet sich nur in der Komponente, die ein mehrdimensionales Array mit fester Größe entschlüsselt, das aus einem Funktionsaufruf aus Solidität zurückgegeben wird.
Dieser Fehler wurde von gefunden von JMAHHHHHHHHHHHHHHHHHHHHHHHHH.
Ungültige Codierung von Strukturen in Ereignissen
- Wahrscheinlichkeit des Auftretens: niedrig
- Ausnutzbarkeit: niedrig
- Entdeckbarkeit durch Tests: hoch
- Einführung in Version: 0.4.17
- In der Version behoben: 0.4.25
Zusammenfassung: Strukturen als Ereignisparameter werden nicht ordnungsgemäß behandelt.
Strukturen sollten ohne den neuen ABI -Encoder nicht als Ereignisparameter unterstützt werden. Der Compiler akzeptierte sie dennoch, kodierte aber ihre Speicheradresse anstelle ihres tatsächlichen Wertes. Auch mit dem neuen ABI -Encoder können Strukturen nicht sein indiziert Ereignisparameter.
Jetzt sind Strukturen für den alten Encoder ordnungsgemäß nicht zugelassen und wenn sie auch für den neuen Encoder indiziert werden.

