-
- Notifications
You must be signed in to change notification settings - Fork 33.7k
Closed
Labels
Description
Bug report
Bug description:
It's possible to make the interpreter exit on Windows in 3.13.0b4 and main due to ValueError: stat: path too long for Windows being raised by os.stat() in updatecache in linecache.py when trying to print a traceback:
>>> exec(compile("print(2**100000)", "s"*99999, "exec")) Exception ignored in the internal traceback machinery: Traceback (most recent call last): File "~\PycharmProjects\cpython\Lib\traceback.py", line 139, in _print_exception_bltin return print_exception(exc, limit=BUILTIN_EXCEPTION_LIMIT, file=file, colorize=colorize) File "~\PycharmProjects\cpython\Lib\traceback.py", line 129, in print_exception te = TracebackException(type(value), value, tb, limit=limit, compact=True) File "~\PycharmProjects\cpython\Lib\traceback.py", line 1133, in __init__ context = TracebackException( File "~\PycharmProjects\cpython\Lib\traceback.py", line 1043, in __init__ self.stack = StackSummary._extract_from_extended_frame_gen( File "~\PycharmProjects\cpython\Lib\traceback.py", line 492, in _extract_from_extended_frame_gen f.line File "~\PycharmProjects\cpython\Lib\traceback.py", line 369, in line self._set_lines() File "~\PycharmProjects\cpython\Lib\traceback.py", line 350, in _set_lines lines.append(linecache.getline(self.filename, lineno).rstrip()) File "~\PycharmProjects\cpython\Lib\linecache.py", line 25, in getline lines = getlines(filename, module_globals) File "~\PycharmProjects\cpython\Lib\linecache.py", line 41, in getlines return updatecache(filename, module_globals) File "~\PycharmProjects\cpython\Lib\linecache.py", line 100, in updatecache stat = os.stat(fullname) ValueError: stat: path too long for Windows Traceback (most recent call last): File "~\PycharmProjects\cpython\Lib\code.py", line 91, in runcode exec(code, self.locals) File "<python-input-2>", line 1, in <module> File "sss[...]sssssss", line 1, in <module> ValueError: Exceeds the limit (4300 digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit During handling of the above exception, another exception occurred: Traceback (most recent call last): File "~\PycharmProjects\cpython\Lib\runpy.py", line 198, in _run_module_as_main return _run_code(code, main_globals, None, File "~\PycharmProjects\cpython\Lib\runpy.py", line 88, in _run_code exec(code, run_globals) File "~\PycharmProjects\cpython\Lib\_pyrepl\__main__.py", line 6, in <module> __pyrepl_interactive_console() File "~\PycharmProjects\cpython\Lib\_pyrepl\main.py", line 59, in interactive_console run_multiline_interactive_console(console) File "~\PycharmProjects\cpython\Lib\_pyrepl\simple_interact.py", line 156, in run_multiline_interactive_console more = console.push(_strip_final_indent(statement), filename=input_name, _symbol="single") # type: ignore[call-arg] File "~\PycharmProjects\cpython\Lib\code.py", line 303, in push more = self.runsource(source, filename, symbol=_symbol) File "~\PycharmProjects\cpython\Lib\_pyrepl\console.py", line 200, in runsource self.runcode(code) File "~\PycharmProjects\cpython\Lib\code.py", line 95, in runcode self.showtraceback() File "~\PycharmProjects\cpython\Lib\_pyrepl\console.py", line 168, in showtraceback super().showtraceback(colorize=self.can_colorize) File "~\PycharmProjects\cpython\Lib\code.py", line 147, in showtraceback lines = traceback.format_exception(ei[0], ei[1], last_tb.tb_next, colorize=colorize) File "~\PycharmProjects\cpython\Lib\traceback.py", line 154, in format_exception te = TracebackException(type(value), value, tb, limit=limit, compact=True) File "~\PycharmProjects\cpython\Lib\traceback.py", line 1043, in __init__ self.stack = StackSummary._extract_from_extended_frame_gen( File "~\PycharmProjects\cpython\Lib\traceback.py", line 492, in _extract_from_extended_frame_gen f.line File "~\PycharmProjects\cpython\Lib\traceback.py", line 369, in line self._set_lines() File "~\PycharmProjects\cpython\Lib\traceback.py", line 350, in _set_lines lines.append(linecache.getline(self.filename, lineno).rstrip()) File "~\PycharmProjects\cpython\Lib\linecache.py", line 25, in getline lines = getlines(filename, module_globals) File "~\PycharmProjects\cpython\Lib\linecache.py", line 41, in getlines return updatecache(filename, module_globals) File "~\PycharmProjects\cpython\Lib\linecache.py", line 100, in updatecache stat = os.stat(fullname) ValueError: stat: path too long for Windows [Thread 30100.0x6108 exited with code 1] [Thread 30100.0x5da4 exited with code 1] [Thread 30100.0x90a0 exited with code 1] [Inferior 1 (process 30100) exited with code 01]CPython versions tested on:
3.13, CPython main branch
Operating systems tested on:
Windows
Linked PRs
- gh-122170: Fix interpreter exiting due to ValueError from
os.statfor too long filename on Windows #122175 - gh-122170: Handle
ValueErrorraised byos.statinlinecache#122176 - [3.13] gh-122170: Handle ValueError raised by os.stat() in linecache (GH-122176) #122348
- [3.12] gh-122170: Handle ValueError raised by os.stat() in linecache (GH-122176) #122349