Enum Flag class with one negative value is resulting in Memory Error
Bug report
A clear and concise description of what the bug is. Include a minimal, reproducible example (https://stackoverflow.com/help/minimal-reproducible-example), if possible.
Your environment
from enum import Flag, verify, NAMED_FLAGS
@verify(NAMED_FLAGS)
class Color(Flag):
RED = -1 # 0
GREEN = 2
BLUE = 4
WHITE = 9
NEON = 6
In this example, it is working good, if RED has value of 0, but is resulting in Memory Error, if its value is changed to -1
- CPython versions tested on: 3.11.0
- Operating system and architecture: Windows 10, 64 bit
The problem is that enum._iter_bits_lsb (https://github.com/python/cpython/blob/c43714fbcdb9bb0927872d6ebf5697edd2e2a1e9/Lib/enum.py#L116) doesn't terminate for negative numbers, the number just grows unbounded.
Negative numbers don't really make sense as OR-able flags (which are conceptually unsigned), but we should fail with an obvious error instead of using all available memory.
cc @ethanfurman for enums
Thanks for the report. Fix merged into main and 3.11.