Closed
Description
Crash report
What happened?
It's possible to abort the interpreter by calling StringIO.__setstate__
with a non-string initial_value
:
python -c "from io import StringIO; StringIO().__setstate__((None, '', 0, {}))"
python: Objects/unicodeobject.c:2542: as_ucs4: Assertion `PyUnicode_Check(string)' failed.
Aborted (core dumped)
Interestingly, on a non-debug build passing an int as initial_value
gives an error message saying that None
should be a valid value:
python -c "from io import StringIO; StringIO().__setstate__((1, '', 0, {}))"
Traceback (most recent call last):
File "<string>", line 1, in <module>
from io import StringIO; StringIO().__setstate__((1, '', 0, {}))
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
TypeError: initial_value must be str or None, not int
Found using fusil by @vstinner.
CPython versions tested on:
3.13, 3.14, CPython main branch
Operating systems tested on:
Linux
Output from running 'python -VV' on the command line:
Python 3.14.0a2+ (heads/main:0af4ec3, Nov 20 2024, 21:45:19) [GCC 13.2.0]