You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Null characters in strings cause a C SystemError #97556
Putting a null byte into a Python string causes a SystemError in Python 3.10, due to a call to strlen in the string parsing library. In Python 3.9, the following example runs without errors:
# -*- coding: latin-1 -*-
"""
<NULL>
"""
In Python 3.10, it raises SystemError: ../Parser/string_parser.c:219: bad argument to internal function.
Internally, the new string_parser library introduced in v3.10.0a1 uses a call to strlen to determine the string size, which is getting thrown off by the null byte. This call is actually unnecessary, as the length has already been calculated by the calling parser and can be retrieved with PyBytes_AsStringAndSize.
Error messages
For single line strings, the error is SystemError: Negative size passed to PyUnicode_New
For multiline strings, the error is SystemError: ../Parser/string_parser.c:219: bad argument to internal function
With the merge of #97594 and #104136, I believe what OP has raised is now resolved in main/3.12, and per #96670 (comment) the changes are not to be backported.
It was @gvanrossum's call not to backport the original fix, and I wouldn't presume to speak authoritatively for him. But, I assume the motivation is the xkcd 1172 aspect of changing the error message string.
Backporting both makes the most sense to me, since just improving the error message would require much more work with the tokenizer buffer working the way it is. If no one has any serious concerns over this, I can work on backporting the necessary PRs.
Backporting both makes the most sense to me, since just improving the error message would require much more work with the tokenizer buffer working the way it is. If no one has any serious concerns over this, I can work on backporting the necessary PRs.
Yeah, I prefer to backport the restriction to keep the changes to a minimum in 3.11 as making a bugfix for the error message can be much more complex 👍
Activity
lysnikolaou commentedon Apr 25, 2023
I'll have a look at this some time either today or tomorrow during the sprints.
pythongh-97556: Raise null bytes syntax error upon null in multiline …
gh-97556: Raise null bytes syntax error upon null in multiline string (…
vstinner commentedon May 4, 2023
Script to reproduce the issues:
Current behavior:
Oh, it seems like the main branch was just changed (40 min ago) by PR #104136 (just merged).
@lysnikolaou: Do you consider backporting your change to Python 3.11?
bskinn commentedon May 4, 2023
With the merge of #97594 and #104136, I believe what OP has raised is now resolved in
main/3.12, and per #96670 (comment) the changes are not to be backported.Thus, I think this issue can be closed.
vstinner commentedon May 4, 2023
SystemError: Parser/string_parser.c:230: bad argument to internal functionsounds like a bug in Python.It's not as if Python 3.11 accepts NUL characters. The question is more about providing a better error message if it finds a NUL character.
bskinn commentedon May 4, 2023
It was @gvanrossum's call not to backport the original fix, and I wouldn't presume to speak authoritatively for him. But, I assume the motivation is the xkcd 1172 aspect of changing the error message string.
pablogsal commentedon May 4, 2023
I think we should backport this to 3.11
gvanrossum commentedon May 4, 2023
Okay let’s backport.
bskinn commentedon May 4, 2023
Should #97594 be backported also, then?
lysnikolaou commentedon May 4, 2023
Backporting both makes the most sense to me, since just improving the error message would require much more work with the tokenizer buffer working the way it is. If no one has any serious concerns over this, I can work on backporting the necessary PRs.
gvanrossum commentedon May 4, 2023
Let’s ask @pablogsal about that one.
pablogsal commentedon May 4, 2023
Yeah, I prefer to backport the restriction to keep the changes to a minimum in 3.11 as making a bugfix for the error message can be much more complex 👍
lysnikolaou commentedon May 7, 2023
Raising a
SyntaxErrorwhen parsing NULL bytes has been backported to 3.11. I'm closing this.vstinner commentedon May 9, 2023
I confirm that 3.11 and main branches now display the same output for
./python script.py(see #97556 (comment) to generate script.py).