-
-
Notifications
You must be signed in to change notification settings - Fork 31.9k
string length overflows to negative when executing #107450
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
Comments
There have been multiple reports that extreme artificial code produces compile problems or runtime problems, either exceptions or crashes. The answer for some is "don't do that; all compilers have limits". 'exec' compiles and runs. IndentationErrors are compile errors. Installed 3.12.0b4 Win 10, running |
I agree that "don't do that" is the answer, but SystemError should never be triggered by the user Python code. It signals about improper use of the C API or some issues in the core. Although the former IndentationError was also not very useful. An error should explicitly report about the compiler limitation, not rely on the undefined behavior of integer overflow in C. On main in debug build it crashes after long delay.
|
Thank you both for your response!
Yes, I am aware that compilers have limits, and I don't think that's a bad thing! It would take a lot more work, and quite probably be a lot slower, were these limitations to be removed. However, I am of the opinion that:
While I would certainly prefer this to be fixed, I understand that it probably won't be. However, I feel that this should at least provide a useful error message (and not provide a raise BaseException("compiler error") from OverflowError("string length overflowed") It would hopefully utilise |
…ows (pythonGH-110754) (cherry picked from commit fb7843e) Co-authored-by: Lysandros Nikolaou <[email protected]>
…ows (pythonGH-110754) (cherry picked from commit fb7843e) Co-authored-by: Lysandros Nikolaou <[email protected]>
…lows (GH-110754) (#110763) (cherry picked from commit fb7843e) Co-authored-by: Lysandros Nikolaou <[email protected]>
…lows (GH-110754) (#110762) (cherry picked from commit fb7843e) Co-authored-by: Lysandros Nikolaou <[email protected]>
The test should be decorated with |
Co-authored-by: Nikita Sobolev <[email protected]>
…ythonGH-110768) (cherry picked from commit 05439d3) Co-authored-by: Lysandros Nikolaou <[email protected]> Co-authored-by: Nikita Sobolev <[email protected]>
…ythonGH-110768) (cherry picked from commit 05439d3) Co-authored-by: Lysandros Nikolaou <[email protected]> Co-authored-by: Nikita Sobolev <[email protected]>
…H-110768) (#110808) (cherry picked from commit 05439d3) Co-authored-by: Lysandros Nikolaou <[email protected]> Co-authored-by: Nikita Sobolev <[email protected]>
…H-110768) (#110809) (cherry picked from commit 05439d3) Co-authored-by: Lysandros Nikolaou <[email protected]> Co-authored-by: Nikita Sobolev <[email protected]>
… test Co-authored-by: Filipe Laíns <[email protected]>
…110832) Co-authored-by: Filipe Laíns <[email protected]> Co-authored-by: Serhiy Storchaka <[email protected]>
…verflow test (pythonGH-110832) (cherry picked from commit a1ac559) Co-authored-by: Lysandros Nikolaou <[email protected]> Co-authored-by: Filipe Laíns <[email protected]> Co-authored-by: Serhiy Storchaka <[email protected]>
…verflow test (pythonGH-110832) (cherry picked from commit a1ac559) Co-authored-by: Lysandros Nikolaou <[email protected]> Co-authored-by: Filipe Laíns <[email protected]> Co-authored-by: Serhiy Storchaka <[email protected]>
…w test (GH-110832) (#110931) (cherry picked from commit a1ac559) Co-authored-by: Lysandros Nikolaou <[email protected]> Co-authored-by: Filipe Laíns <[email protected]> Co-authored-by: Serhiy Storchaka <[email protected]>
…w test (GH-110832) (#110939) (cherry picked from commit a1ac559) Co-authored-by: Filipe Laíns <[email protected]> Co-authored-by: Serhiy Storchaka <[email protected]>
… test (python#110832) Co-authored-by: Filipe Laíns <[email protected]> Co-authored-by: Serhiy Storchaka <[email protected]>
…ython#110768) Co-authored-by: Nikita Sobolev <[email protected]>
… test (python#110832) Co-authored-by: Filipe Laíns <[email protected]> Co-authored-by: Serhiy Storchaka <[email protected]>
Bug report
Checklist
not a bug in a third-party project
and am confident this bug has not been reported before
A clear and concise description of the bug
The following code causes an error to be raised in all tested versions of Python.
Which error is raised varies by version, and as such the specific error message is listed with its corresponding version in the below section.
Some (hopefully) helpful information:
exec
'ing it), the problem occurs when attempting toexec
it.2**33
).NOTE:
I believe that this error will also occur when running real file rather than building a string and using
exec
, but I have not yet confirmed that.Your environment
I tested this in three environments, with as many versions of Python as I could conveniently use.
Arch GNU/Linux
Arch GNU/Linux
Python 3.10.10 (main, Mar 5 2023, 22:56:53) [GCC 12.2.1 20230201]
IndentationError: unindent does not match any outer indentation level
Python 3.11.3 (main, Jun 5 2023, 09:32:32) [GCC 13.1.1 20230429]
SystemError: Negative size passed to PyUnicode_New
Microsoft Windows 10
Microsoft Windows 10 (version 22H2 build 19045.3208)
inside a VirtualBox virtual machinePython 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 16:30:00) [MSC v.1900 64 bit (AMD64)]
IndentationError: None
Python 3.8.10 (tags/v3.8.10:3d8993a, May 3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)]
IndentationError: None
Python 3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)]
IndentationError: unindent does not match any outer indentation level
Python 3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]
IndentationError: unindent does not match any outer indentation level
Python 3.11.4 (tags/v3.11.4:d2340ef, Jun 7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)]
SystemError: Negative size passed to PyUnicode_New
Ubuntu GNU/Linux
Ubuntu 22.04 GNU/Linux
inside a VirtualBox virtual machinePython 3.7.17 (default, Jun 6 2023, 20:10:09) [GCC 11.3.0]
IndentationError: None
Python 3.8.17 (default, Jun 6 2023, 20:10:50) [GCC 11.3.0]
IndentationError: None
Python 3.9.17 (main, Jun 6 2023, 20:11:21) [GCC 11.3.0]
IndentationError: unindent does not match any outer indentation level
Python 3.10.6 (main, May 29 2023, 11:10:38) [GCC 11.3.0]
IndentationError: unindent does not match any outer indentation level
Python 3.11.4 (main, Jun 7 2023, 12:45:48) [GCC 11.3.0]
SystemError: Negative size passed to PyUnicode_New
Should any further information be required about the environments that I used, please ask.
What I believe causes the problem
I suspect very strongly that the error occurs as a result of an integer overflow. (A value larger than
2**31 - 1
will overflow and become negative when using 2's complement with 32 bit signed integers).Possible solution
I think that this can be fixed by using a 64 bit integer to hold the length of the string while 64 bit platforms. This, while still leaving the error theoretically possible, would in practice avoid the error entirely because one would encounter a
MemoryError
first.Linked PRs
The text was updated successfully, but these errors were encountered: