Closed
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.stat
for too long filename on Windows #122175 - gh-122170: Handle
ValueError
raised byos.stat
inlinecache
#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