[Python-checkins] cpython (3.5): Fix SystemError in "raise" statement
victor.stinner
python-checkins at python.org
Thu Aug 18 12:15:03 EDT 2016
https://hg.python.org/cpython/rev/ba45fbb16499
changeset: 102740:ba45fbb16499
branch: 3.5
parent: 102733:df3a907d94cd
user: Victor Stinner <victor.stinner at gmail.com>
date: Thu Aug 18 18:13:10 2016 +0200
summary:
Fix SystemError in "raise" statement
Issue #27558: Fix a SystemError in the implementation of "raise" statement.
In a brand new thread, raise a RuntimeError since there is no active
exception to reraise.
Patch written by Xiang Zhang.
files:
Lib/test/test_threading.py | 18 ++++++++++++++++++
Misc/NEWS | 4 ++++
Python/ceval.c | 2 +-
3 files changed, 23 insertions(+), 1 deletions(-)
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -1043,6 +1043,24 @@
self.assertEqual(out, b'')
self.assertNotIn("Unhandled exception", err.decode())
+ def test_bare_raise_in_brand_new_thread(self):
+ def bare_raise():
+ raise
+
+ class Issue27558(threading.Thread):
+ exc = None
+
+ def run(self):
+ try:
+ bare_raise()
+ except Exception as exc:
+ self.exc = exc
+
+ thread = Issue27558()
+ thread.start()
+ thread.join()
+ self.assertIsNotNone(thread.exc)
+ self.assertIsInstance(thread.exc, RuntimeError)
class TimerTests(BaseTestCase):
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,10 @@
Core and Builtins
-----------------
+- Issue #27558: Fix a SystemError in the implementation of "raise" statement.
+ In a brand new thread, raise a RuntimeError since there is no active
+ exception to reraise. Patch written by Xiang Zhang.
+
- Issue #27419: Standard __import__() no longer look up "__import__" in globals
or builtins for importing submodules or "from import". Fixed handling an
error of non-string package name.
diff --git a/Python/ceval.c b/Python/ceval.c
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -4123,7 +4123,7 @@
type = tstate->exc_type;
value = tstate->exc_value;
tb = tstate->exc_traceback;
- if (type == Py_None) {
+ if (type == Py_None || type == NULL) {
PyErr_SetString(PyExc_RuntimeError,
"No active exception to reraise");
return 0;
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list