◐ Shell
clean mode source ↗

Issue 19327: re doesn't work with big charsets

>>> import re
>>> re.compile('[%s]' % ''.join(map(chr, range(256, 2**16, 255))))
Traceback (most recent call last):
  File "/home/serhiy/py/cpython/Lib/sre_compile.py", line 211, in _optimize_charset
    charmap[fixup(av)] = 1
IndexError: list assignment index out of range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/serhiy/py/cpython/Lib/re.py", line 213, in compile
    return _compile(pattern, flags)
  File "/home/serhiy/py/cpython/Lib/re.py", line 280, in _compile
    p = sre_compile.compile(pattern, flags)
  File "/home/serhiy/py/cpython/Lib/sre_compile.py", line 489, in compile
    code = _code(p, flags)
  File "/home/serhiy/py/cpython/Lib/sre_compile.py", line 471, in _code
    _compile_info(code, p, flags)
  File "/home/serhiy/py/cpython/Lib/sre_compile.py", line 459, in _compile_info
    _compile_charset(charset, flags, code)
  File "/home/serhiy/py/cpython/Lib/sre_compile.py", line 177, in _compile_charset
    for op, av in _optimize_charset(charset, fixup):
  File "/home/serhiy/py/cpython/Lib/sre_compile.py", line 220, in _optimize_charset
    return _optimize_unicode(charset, fixup)
  File "/home/serhiy/py/cpython/Lib/sre_compile.py", line 342, in _optimize_unicode
    mapping = array.array('b', mapping).tobytes()
OverflowError: signed char is greater than maximum