Vyper — это pythonic язык смарт-контрактов для виртуальной машины Ethereum. Начиная с версии 0.3.8 и до версии 0.4.0b1, при цикле по `range…
Vyper — это pythonic язык смарт-контрактов для виртуальной машины Ethereum. Начиная с версии 0.3.8 и до версии 0.4.0b1, при цикле по `range` формы `range(start, start + N)`, если `start` отрицательный, выполнение всегда будет возвращаться. Эта проблема вызвана некорректным утверждением, вставленным кодогенерацией диапазона `stmt.parse_For_range()`. Проблема возникает, когда `start` является знаковым, вместо использования `sle` используется `le`, и `start` интерпретируется как целое число без знака для сравнения. Если это отрицательное число, его 255-й бит установлен в `1` и, следовательно, интерпретируется как очень большое целое число без знака, что приводит к тому, что утверждение всегда завершается неудачей. Затронут любой контракт, имеющий `range(start, start + N)`, где `start` является целым числом со знаком с возможностью того, что `start` будет отрицательным. Если вызов проходит через цикл, предоставляя отрицательный `start`, выполнение будет возвращаться. Версия 0.4.0b1 исправляет эту проблему.
При преобразовании одного типа данных в другой, например long в integer, данные могут быть усечены или преобразованы таким образом, что получаются непредвиденные значения. Если полученные значения используются в чувствительном контексте, это может привести к опасному поведению.
https://cwe.mitre.org/data/definitions/681.html →Открыть в коллекции CWE →