gh-150207: type-crash(): make helpers.c in tokenizer throw a no mem error #150210
gh-150207: type-crash(): make helpers.c in tokenizer throw a no mem error #150210grantlouisherman wants to merge 6 commits into
Conversation
…alloc fails Signed-off-by: grantlouisherman <grantlouisherman041@gmail.com>
|
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 |
Signed-off-by: grantlouisherman <grantlouisherman041@gmail.com>
| 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``. |
There was a problem hiding this comment.
| 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``. |
|
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. |
|
Sure @stestagg let me update |
|
@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 |
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