summaryrefslogtreecommitdiffstats
path: root/Objects/exceptions.c
diff options
context:
space:
mode:
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>2022-11-18 15:44:43 (GMT)
committerGitHub <noreply@github.com>2022-11-18 15:44:43 (GMT)
commitc8c6113398ee9a7867fe9b08bc539cceb61e2aaa (patch)
tree61ce8fc106b5578aeeeb524703bd195eabffab0a /Objects/exceptions.c
parenta220c6d1ee3053895f502b43b47dc3a9c55fa6a3 (diff)
downloadcpython-c8c6113398ee9a7867fe9b08bc539cceb61e2aaa.zip
cpython-c8c6113398ee9a7867fe9b08bc539cceb61e2aaa.tar.gz
cpython-c8c6113398ee9a7867fe9b08bc539cceb61e2aaa.tar.bz2
gh-99553: fix bug where an ExceptionGroup subclass can wrap a BaseException (GH-99572)
Diffstat (limited to 'Objects/exceptions.c')
-rw-r--r--Objects/exceptions.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
index af88804..db6f7d5 100644
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -753,7 +753,19 @@ BaseExceptionGroup_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
}
}
else {
- /* Do nothing - we don't interfere with subclasses */
+ /* user-defined subclass */
+ if (nested_base_exceptions) {
+ int nonbase = PyObject_IsSubclass((PyObject*)cls, PyExc_Exception);
+ if (nonbase == -1) {
+ goto error;
+ }
+ else if (nonbase == 1) {
+ PyErr_Format(PyExc_TypeError,
+ "Cannot nest BaseExceptions in '%.200s'",
+ cls->tp_name);
+ goto error;
+ }
+ }
}
if (!cls) {