homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Recursive traceback crashes Python Interpreter
Type: crash Stage: resolved
Components: Interpreter Core Versions: Python 3.10, Python 3.9, Python 3.8, Python 3.7, Python 3.6
process
Status: closed Resolution: fixed
Dependencies: Superseder: crash with unbounded recursion in except statement
View: 42500
Assigned To: Nosy List: ronaldoussoren, stestagg, xxm
Priority: normal Keywords:

Created on 2020年12月16日 08:02 by xxm, last changed 2022年04月11日 14:59 by admin. This issue is now closed.

Messages (6)
msg383118 - (view) Author: Xinmeng Xia (xxm) Date: 2020年12月16日 08:02
=================
import traceback
def foo():
 traceback.print_exc()
 foo() 
 
foo()
================
Try running the above program, the interpreter is crashed with the error message like the following:
Fatal Python error: Cannot recover from stack overflow.
NoneType: None
NoneType: None
NoneType: None
NoneType: None
...
NoneType: None
NoneType: None
NoneType: <unprintable NoneType object>
NoneType: None
NoneType: None
...
NoneType: None
NoneType: None
NoneType: None
Fatal Python error: _Py_CheckRecursiveCall: Cannot recover from stack overflow.
Python runtime state: initialized
Current thread 0x00007fab0bdda700 (most recent call first):
 File "/usr/local/python310/lib/python3.10/traceback.py", line 155 in _some_str
 File "/usr/local/python310/lib/python3.10/traceback.py", line 515 in __init__
 File "/usr/local/python310/lib/python3.10/traceback.py", line 103 in print_exception
 File "/usr/local/python310/lib/python3.10/traceback.py", line 163 in print_exc
 File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 4 in foo
 File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5 in foo
 File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5 in foo
...
 File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5 in foo
 File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5 in foo
 File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5 in foo
 File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5 in foo
 ...
Aborted (core dumped)
msg383249 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2020年12月17日 15:31
This might be related to #42500 
msg383253 - (view) Author: Xinmeng Xia (xxm) Date: 2020年12月17日 16:40
In issue#36272, they discuss a bug in logging module. They show an example which is similar as this one. So I think I think there might be a similar bug in traceback module.
msg383267 - (view) Author: Steve Stagg (stestagg) Date: 2020年12月17日 21:45
Confirmed that bpo-42500 fixes this traceback, in commit 4e7a69bdb6 
Parent commit:
user@obsidian ~/t/f/cpython (master)> git checkout 93a0ef7
Note: switching to '93a0ef7'.
HEAD is now at 93a0ef7647 Correct return type in Modules/_ssl.c::sslmodule_legacy (GH-23609)
user@obsidian ~/t/f/cpython ((93a0ef76...))> ../test.sh
+ make distclean
+ CFLAGS=-O0
+ ./configure --prefix=/home/user/prefix --exec-prefix=/home/user/prefix --cache-file=../config.cache --with-pydebug --without-ensurepip
+ CFLAGS=-O0
+ make -j8 install
/home/user/cpython/Lib/runpy.py:111: PendingDeprecationWarning: lib2to3 package is deprecated and may not be able to parse Python 3.10+
 __import__(pkg_name)
/home/user/cpython/Lib/runpy.py:111: PendingDeprecationWarning: lib2to3 package is deprecated and may not be able to parse Python 3.10+
 __import__(pkg_name)
++ realpath /home/user/prefix/include/python3.10d/
+ INCLUDE_DIR=/home/user/prefix/include/python3.10d
+ set +e
+ PYTHONHOME=/home/user/prefix
+ /home/user/prefix/bin/python3 ../test.py
NoneType: None
...
NoneType: None
Fatal Python error: _Py_CheckRecursiveCall: Cannot recover from stack overflow.
Python runtime state: initialized
Current thread 0x00007f483d4bd740 (most recent call first):
 File "/home/user/prefix/lib/python3.10/traceback.py", line 165 in _some_str
 File "/home/user/prefix/lib/python3.10/traceback.py", line 524 in __init__
 File "/home/user/prefix/lib/python3.10/traceback.py", line 113 in print_exception
 File "/home/user/prefix/lib/python3.10/traceback.py", line 173 in print_exc
 File "/home/user/cpython/../test.py", line 4 in foo
 ...
../test.sh: line 33: 50081 Aborted (core dumped) PYTHONHOME=$PREFIX $EPREFIX/bin/python3 ../test.py
+ [[ 134 -eq 139 ]]
+ exit 0
After fix merged:
user@obsidian ~/t/f/cpython ((93a0ef76...)) [1]> git checkout 4e7a69bdb6
Previous HEAD position was 93a0ef7647 Correct return type in Modules/_ssl.c::sslmodule_legacy (GH-23609)
HEAD is now at 4e7a69bdb6 bpo-42500: Fix recursion in or after except (GH-23568)
user@obsidian ~/t/f/cpython ((4e7a69bd...))> ../test.sh
+ make distclean
+ CFLAGS=-O0
+ ./configure --prefix=/home/user/prefix --exec-prefix=/home/user/prefix --cache-file=../config.cache --with-pydebug --without-ensurepip
+ CFLAGS=-O0
+ make -j8 install
/home/user/cpython/Lib/runpy.py:111: PendingDeprecationWarning: lib2to3 package is deprecated and may not be able to parse Python 3.10+
 __import__(pkg_name)
/home/user/cpython/Lib/runpy.py:111: PendingDeprecationWarning: lib2to3 package is deprecated and may not be able to parse Python 3.10+
 __import__(pkg_name)
++ realpath /home/user/prefix/include/python3.10d/
+ INCLUDE_DIR=/home/user/prefix/include/python3.10d
+ set +e
+ PYTHONHOME=/home/user/prefix
+ /home/user/prefix/bin/python3 ../test.py
NoneType: None
...
NoneType: None
Traceback (most recent call last):
 File "/home/user/prefix/lib/python3.10/traceback.py", line 165, in _some_str
 return str(value)
RecursionError: maximum recursion depth exceeded while calling a Python object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
 File "/home/user/cpython/../test.py", line 7, in <module>
 foo()
 File "/home/user/cpython/../test.py", line 5, in foo
 foo() 
 File "/home/user/cpython/../test.py", line 5, in foo
 foo() 
 File "/home/user/cpython/../test.py", line 5, in foo
 foo() 
 [Previous line repeated 989 more times]
 File "/home/user/cpython/../test.py", line 4, in foo
 traceback.print_exc()
 File "/home/user/prefix/lib/python3.10/traceback.py", line 173, in print_exc
 print_exception(*sys.exc_info(), limit=limit, file=file, chain=chain)
 File "/home/user/prefix/lib/python3.10/traceback.py", line 113, in print_exception
 for line in TracebackException(
 File "/home/user/prefix/lib/python3.10/traceback.py", line 632, in format
 yield from self.format_exception_only()
 File "/home/user/prefix/lib/python3.10/traceback.py", line 580, in format_exception_only
 yield _format_final_exc_line(stype, self._str)
 File "/home/user/prefix/lib/python3.10/traceback.py", line 156, in _format_final_exc_line
 valuestr = _some_str(value)
 File "/home/user/prefix/lib/python3.10/traceback.py", line 167, in _some_str
 return '<unprintable %s object>' % type(value).__name__
RecursionError: maximum recursion depth exceeded while calling a Python object
+ [[ 1 -eq 139 ]]
+ exit 0
msg383268 - (view) Author: Steve Stagg (stestagg) Date: 2020年12月17日 21:46
Sorry, previous should have read "Fixes the abort"
msg383575 - (view) Author: Xinmeng Xia (xxm) Date: 2020年12月22日 08:26
Thank you very much, looking forward to the new Python version.
Could you please kindly change the resolution into fixed and close this issue?
History
Date User Action Args
2022年04月11日 14:59:39adminsetgithub: 86817
2020年12月22日 08:32:24ronaldoussorensetstatus: open -> closed
superseder: crash with unbounded recursion in except statement
resolution: fixed
stage: resolved
2020年12月22日 08:26:36xxmsetmessages: + msg383575
2020年12月17日 21:46:19stestaggsetmessages: + msg383268
2020年12月17日 21:45:21stestaggsetnosy: + stestagg
messages: + msg383267
2020年12月17日 16:40:45xxmsetmessages: + msg383253
2020年12月17日 15:31:06ronaldoussorensetnosy: + ronaldoussoren
messages: + msg383249
2020年12月17日 06:44:33xxmsettitle: Title: Recursive traceback crashes Python Interpreter -> Recursive traceback crashes Python Interpreter
2020年12月16日 08:02:15xxmcreate

AltStyle によって変換されたページ (->オリジナル) /