Skip to content

gh-150207: type-crash(): make helpers.c in tokenizer throw a no mem error #150210

Closed
grantlouisherman wants to merge 6 commits into
python:mainfrom
grantlouisherman:type-system-error-crash
Closed

gh-150207: type-crash(): make helpers.c in tokenizer throw a no mem error #150210
grantlouisherman wants to merge 6 commits into
python:mainfrom
grantlouisherman:type-system-error-crash

Conversation

@grantlouisherman
Copy link
Copy Markdown

@grantlouisherman grantlouisherman commented May 22, 2026

Original report was around this snippet of code:
import resource MB_512 = 512 * 1024 * 1024 resource.setrlimit(resource.RLIMIT_AS, (MB_512, MB_512)) eval("A"* 420000000)

Throwing a system error. Based off the write up made in #150207 I felt like there was a fair case to actually show the user a Mem error instead of a system crash.
`>>> import resource
... MB_512 = 512 * 1024 * 1024
... resource.setrlimit(resource.RLIMIT_AS, (MB_512, MB_512))
... eval("A"* 420000000)
...
Traceback (most recent call last):
File "", line 4, in
eval("A"* 420000000)
~~~~^^^^^^^^^^^^^^^^
MemoryError

`

I think this does provide a bit nicer of an experience but I think I need an actual adult to verify this for me. I also dont know the larger ramifications but it felt worth to throw something up

…alloc fails

Signed-off-by: grantlouisherman <grantlouisherman041@gmail.com>
@bedevere-app
Copy link
Copy Markdown

bedevere-app Bot commented May 22, 2026

Most changes to Python require a NEWS entry. Add one using the blurb_it web app or the blurb command-line tool.

If this change has little impact on Python users, wait for a maintainer to apply the skip news label instead.

blurb-it Bot and others added 3 commits May 22, 2026 01:18
Comment on lines +2 to +4
fails in the tokenizer's ``_PyTokenizer_translate_newlines`` helper, so the
out-of-memory condition is propagated as a proper Python exception instead
of only being recorded in ``tok->done``.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
fails in the tokenizer's ``_PyTokenizer_translate_newlines`` helper, so the
out-of-memory condition is propagated as a proper Python exception instead
of only being recorded in ``tok->done``.
fails in the tokenizer's ``_PyTokenizer_translate_newlines`` helper, so the
out-of-memory condition is propagated as a proper Python exception instead
of only being recorded in ``tok->done``.

@stestagg
Copy link
Copy Markdown

While this covers _PyTokenizer_translate_newlines which /is/ the major vector for crashes, theoretically _PyTokenizer_tok_new and _PyTokenizer_new_string calls could also return NULL and caude the same problem in _PyTokenizer_FromUTF8.

@grantlouisherman
Copy link
Copy Markdown
Author

Sure @stestagg let me update

@grantlouisherman
Copy link
Copy Markdown
Author

@aisk @stestagg I moved the PR here https://github.com/python/cpython/pull/150275/commits because I messed up some of the git rebasing stuff

@grantlouisherman grantlouisherman deleted the type-system-error-crash branch May 22, 2026 21:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants