[New-bugs-announce] [issue37365] RecursionError not caught explicitly may crash with "Aborted (core dumped)"

Adrien report at bugs.python.org
Fri Jun 21 12:08:01 EDT 2019


New submission from Adrien <delgan.py at gmail.com>:

This is an issue that I first saw repoted by @remi.lapeyre on issue36272: https://bugs.python.org/issue36272#msg337843
It also be reported some years ago: https://stackoverflow.com/a/54171640/2291710
I searched but I did not find any existing issue, so I open a new one, I hope this is not a duplicate.

It's easily reproducible:


def rec():
    try:
        rec()
    except Exception:
        rec()
rec()


It will kill the CPython interpreter (@remi.lapeyre provided explanation in the issue I linked).

Of course, this is a contrived example. Still, I guess CPython should avoid to crash in any situation. This is a tricky edge case: by doing `except Exception:` one could expect to correctly handle all kind of errors without being aware that in some situation the "RecursionError" need to be managed too.

Particularly, the fix in issue36272 solely patches "StreamHandler": https://github.com/python/cpython/blob/65f64b1903ae85b97a30f514bbc1b7ce940c3af2/Lib/logging/__init__.py#L1082-L1102
There is many other handlers that are still affected, every time you see "except Exception" in "emit()": https://github.com/python/cpython/blob/65f64b1903ae85b97a30f514bbc1b7ce940c3af2/Lib/logging/handlers.py

Finally, it should also be noted that the "except RecursionError" workaround implies that loggers are not longer able to catch recursive erros in "write()" or "format()" without re-raising the RecursionError and (probably) halting the program.
It may happen for example that a faulty implementation of a custom Handler or LogRecord attribute cause a RecursionError. Thanks to the "raiseExceptions = false" logging option, this would usually be caught and a message printed on stderr without killing the app.

----------
messages: 346232
nosy: Delgan
priority: normal
severity: normal
status: open
title: RecursionError not caught explicitly may crash with "Aborted (core dumped)"
type: crash

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue37365>
_______________________________________


More information about the New-bugs-announce mailing list