Description
Vyper is a pythonic Smart Contract Language for the Ethereum virtual machine. Starting in version 0.3.8 and prior to version 0.4.0b1, when looping over a `range` of the form `range(start, start + N)`, if `start` is negative, the execution will always revert. This issue is caused by an incorrect assertion inserted by the code generation of the range `stmt.parse_For_range()`. The issue arises when `start` is signed, instead of using `sle`, `le` is used and `start` is interpreted as an unsigned integer for the comparison. If it is a negative number, its 255th bit is set to `1` and is hence interpreted as a very large unsigned integer making the assertion always fail. Any contract having a `range(start, start + N)` where `start` is a signed integer with the possibility for `start` to be negative is affected. If a call goes through the loop while supplying a negative `start` the execution will revert. Version 0.4.0b1 fixes the issue.
Published: 2024-04-25
Score: 5.3 Medium
EPSS: 1.5% Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Analysis and contextual insights are available on OpenCVE Cloud.

Remediation

No vendor fix or workaround currently provided.

Additional remediation guidance may be available on OpenCVE Cloud.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
EUVD EUVD EUVD-2024-1269 Vyper is a pythonic Smart Contract Language for the Ethereum virtual machine. Starting in version 0.3.8 and prior to version 0.4.0b1, when looping over a `range` of the form `range(start, start + N)`, if `start` is negative, the execution will always revert. This issue is caused by an incorrect assertion inserted by the code generation of the range `stmt.parse_For_range()`. The issue arises when `start` is signed, instead of using `sle`, `le` is used and `start` is interpreted as an unsigned integer for the comparison. If it is a negative number, its 255th bit is set to `1` and is hence interpreted as a very large unsigned integer making the assertion always fail. Any contract having a `range(start, start + N)` where `start` is a signed integer with the possibility for `start` to be negative is affected. If a call goes through the loop while supplying a negative `start` the execution will revert. Version 0.4.0b1 fixes the issue.
Github GHSA Github GHSA GHSA-ppx5-q359-pvwj vyper's range(start, start + N) reverts for negative numbers
History

Mon, 05 May 2025 18:00:00 +0000

Type Values Removed Values Added
First Time appeared Vyperlang
Vyperlang vyper
CPEs cpe:2.3:a:vyperlang:vyper:*:*:*:*:*:python:*:*
cpe:2.3:a:vyperlang:vyper:0.4.0:-:*:*:*:python:*:*
Vendors & Products Vyperlang
Vyperlang vyper

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2024-08-02T02:13:39.300Z

Reserved: 2024-04-12T19:41:51.168Z

Link: CVE-2024-32481

cve-icon Vulnrichment

Updated: 2024-08-02T02:13:39.300Z

cve-icon NVD

Status : Analyzed

Published: 2024-04-25T17:15:50.273

Modified: 2025-05-05T17:31:53.233

Link: CVE-2024-32481

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

No data.

Weaknesses