Advisory Database
  • Advisories
  • Dependency Scanning
  1. pypi
  2. ›
  3. vyper
  4. ›
  5. GMS-2022-1912

GMS-2022-1912: Multiple evaluation of contract address in call in vyper

June 9, 2022 (updated August 2, 2023)

Impact

when a calling an external contract with no return value, the contract address could be evaluated twice. this is usually only an efficiency problem, but if evaluation of the contract address has side effects, it could result in double evaluation of the side effects.

in the following example, Foo(msg.sender).bar() is the contract address for the following call (to .foo()), and could get evaluated twice

interface Foo:
 def foo(): nonpayable
 def bar() -> address: nonpayable

@external
def do_stuff():
 Foo(Foo(msg.sender).bar()).foo()

Patches

v0.3.4

Workarounds

assign contract addresses to variables. the above example would change to

@external
def do_stuff():
 t: Foo = Foo(msg.sender).bar()
 t.foo()

References

For more information

References

  • github.com/advisories/GHSA-4v9q-cgpw-cf38
  • github.com/vyperlang/vyper/commit/6b4d8ff185de071252feaa1c319712b2d6577f8d
  • github.com/vyperlang/vyper/security/advisories/GHSA-4v9q-cgpw-cf38

Code Behaviors & Features

Detect and mitigate GMS-2022-1912 with GitLab Dependency Scanning

Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →

Affected versions

All versions before 0.3.4

Fixed versions

  • 0.3.4

Solution

Upgrade to version 0.3.4 or above.

Impact 7.5 HIGH

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N

Learn more about CVSS

Weakness

  • CWE-670: Always-Incorrect Control Flow Implementation

Source file

pypi/vyper/GMS-2022-1912.yml

Spotted a mistake? Edit the file on GitLab.

  • Site Repo
  • About GitLab
  • Terms
  • Privacy Statement
  • Contact

Page generated Wed, 14 May 2025 12:15:45 +0000.