Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Assertion failure from StringIO.__setstate__ #127182

Closed
devdanzin opened this issue Nov 23, 2024 · 0 comments
Closed

Assertion failure from StringIO.__setstate__ #127182

devdanzin opened this issue Nov 23, 2024 · 0 comments
Assignees
Labels
3.13 bugs and security fixes 3.14 new features, bugs and security fixes extension-modules C modules in the Modules dir type-crash A hard crash of the interpreter, possibly with a core dump

Comments

@devdanzin
Copy link
Contributor

devdanzin commented Nov 23, 2024

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]

Linked PRs

@devdanzin devdanzin added the type-crash A hard crash of the interpreter, possibly with a core dump label Nov 23, 2024
@picnixz picnixz added interpreter-core (Objects, Python, Grammar, and Parser dirs) extension-modules C modules in the Modules dir 3.13 bugs and security fixes 3.14 new features, bugs and security fixes and removed interpreter-core (Objects, Python, Grammar, and Parser dirs) labels Nov 23, 2024
@sobolevn sobolevn self-assigned this Nov 24, 2024
sobolevn added a commit to sobolevn/cpython that referenced this issue Nov 24, 2024
sobolevn added a commit that referenced this issue Nov 25, 2024
…rst value (#127219)

Co-authored-by: Victor Stinner <vstinner@python.org>
miss-islington pushed a commit to miss-islington/cpython that referenced this issue Nov 25, 2024
…the first value (pythonGH-127219)

(cherry picked from commit a2ee899)

Co-authored-by: sobolevn <mail@sobolevn.me>
Co-authored-by: Victor Stinner <vstinner@python.org>
miss-islington pushed a commit to miss-islington/cpython that referenced this issue Nov 25, 2024
…the first value (pythonGH-127219)

(cherry picked from commit a2ee899)

Co-authored-by: sobolevn <mail@sobolevn.me>
Co-authored-by: Victor Stinner <vstinner@python.org>
sobolevn added a commit that referenced this issue Nov 25, 2024
… the first value (GH-127219) (#127263)

gh-127182: Fix `io.StringIO.__setstate__` crash when `None` is the first value (GH-127219)
(cherry picked from commit a2ee899)

Co-authored-by: sobolevn <mail@sobolevn.me>
Co-authored-by: Victor Stinner <vstinner@python.org>
sobolevn added a commit that referenced this issue Nov 25, 2024
… the first value (GH-127219) (#127262)

gh-127182: Fix `io.StringIO.__setstate__` crash when `None` is the first value (GH-127219)
(cherry picked from commit a2ee899)

Co-authored-by: sobolevn <mail@sobolevn.me>
Co-authored-by: Victor Stinner <vstinner@python.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3.13 bugs and security fixes 3.14 new features, bugs and security fixes extension-modules C modules in the Modules dir type-crash A hard crash of the interpreter, possibly with a core dump
Projects
None yet
Development

No branches or pull requests

3 participants