Skip to content

Custom str subclass as keyword argument leads to System Error #94938

@jeff5

Description

@jeff5

When arguments are given by keyword using a dictionary, CPython requires that the key be of type str, or a sub-class. If a custom str subclass defines a badly-behaved __eq__, and is used that way, a SystemError (null argument) can result, which is not expected in the interpreter.

This report stems from a discussion on discuss.python.org about the types of keyword that ought to be allowed -- it's not code I actually want to run.

Reproducer

# kwargsbomb.py Use of a str subclass as a keyword class S(str): def __eq__(self, other): print(other) return True def __hash__(self): return 42 u = "my.domain.name" a = u.split(**{'sep':'.'}) # ok print(a) b = u.split(**{S('sep'):'.'}) # ok print(b) c = u.split(**{S('xxx'):'.'}) # fails print(c) 

Output

['my', 'domain', 'name'] ['my', 'domain', 'name'] sep Traceback (most recent call last): File " ... \kwargsbomb.py", line 18, in <module> c = u.split(**{S('xxx'):'.'}) # fails ^^^^^^^^^^^^^^^^^^^^^^^^^ SystemError: null argument to internal routine 

Environment

  • CPython versions: 3.10.2 3.11.0b4 (in Idle and at the prompt)
  • Operating system and architecture: Windows 10 64-bit

Metadata

Metadata

Labels

3.10only security fixes3.11only security fixes3.12only security fixestopic-argument-clinictype-bugAn unexpected behavior, bug, or error

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions