cpython icon indicating copy to clipboard operation
cpython copied to clipboard

Enum Flag class with one negative value is resulting in Memory Error

Open udhayprakash opened this issue 3 years ago • 1 comments

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

udhayprakash avatar Nov 08 '22 14:11 udhayprakash

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

JelleZijlstra avatar Nov 08 '22 14:11 JelleZijlstra

Thanks for the report. Fix merged into main and 3.11.

ethanfurman avatar Nov 08 '22 20:11 ethanfurman