summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Lapeyre <remi.lapeyre@henki.fr>2019-03-15 06:53:34 (GMT)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>2019-03-15 06:53:34 (GMT)
commit65f64b1903ae85b97a30f514bbc1b7ce940c3af2 (patch)
treee5c7726b578c7a37492366807927f3682df87681
parent1c668d16574d47cffd469e00930f39afac927288 (diff)
downloadcpython-65f64b1903ae85b97a30f514bbc1b7ce940c3af2.zip
cpython-65f64b1903ae85b97a30f514bbc1b7ce940c3af2.tar.gz
cpython-65f64b1903ae85b97a30f514bbc1b7ce940c3af2.tar.bz2
bpo-36272: Logging now propagates RecursionError (GH-12312)
-rw-r--r--Lib/logging/__init__.py4
-rw-r--r--Lib/test/test_logging.py17
-rw-r--r--Misc/NEWS.d/next/Library/2019-03-13-14-14-36.bpo-36272.f3l2IG.rst2
3 files changed, 22 insertions, 1 deletions
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index b4659af..7355396 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -1032,6 +1032,8 @@ class Handler(Filterer):
sys.stderr.write('Message: %r\n'
'Arguments: %s\n' % (record.msg,
record.args))
+ except RecursionError: # See issue 36272
+ raise
except Exception:
sys.stderr.write('Unable to print the message and arguments'
' - possible formatting error.\nUse the'
@@ -1094,6 +1096,8 @@ class StreamHandler(Handler):
# issue 35046: merged two stream.writes into one.
stream.write(msg + self.terminator)
self.flush()
+ except RecursionError: # See issue 36272
+ raise
except Exception:
self.handleError(record)
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index c797d66..b23ae24 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -41,7 +41,7 @@ import socket
import struct
import sys
import tempfile
-from test.support.script_helper import assert_python_ok
+from test.support.script_helper import assert_python_ok, assert_python_failure
from test import support
import textwrap
import threading
@@ -4142,6 +4142,21 @@ class ModuleLevelMiscTest(BaseTest):
self.assertIn("exception in __del__", err)
self.assertIn("ValueError: some error", err)
+ def test_recursion_error(self):
+ # Issue 36272
+ code = """if 1:
+ import logging
+
+ def rec():
+ logging.error("foo")
+ rec()
+
+ rec()"""
+ rc, out, err = assert_python_failure("-c", code)
+ err = err.decode()
+ self.assertNotIn("Cannot recover from stack overflow.", err)
+ self.assertEqual(rc, 1)
+
class LogRecordTest(BaseTest):
def test_str_rep(self):
diff --git a/Misc/NEWS.d/next/Library/2019-03-13-14-14-36.bpo-36272.f3l2IG.rst b/Misc/NEWS.d/next/Library/2019-03-13-14-14-36.bpo-36272.f3l2IG.rst
new file mode 100644
index 0000000..2f2f790
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-03-13-14-14-36.bpo-36272.f3l2IG.rst
@@ -0,0 +1,2 @@
+:mod:`logging` does not silently ignore RecursionError anymore. Patch
+contributed by Rémi Lapeyre.