]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-110237: Check `PyList_Append` for errors in `_PyEval_MatchClass` (#110238)
authordenballakh <47365157+denballakh@users.noreply.github.com>
Sun, 8 Oct 2023 00:04:51 +0000 (03:04 +0300)
committerGitHub <noreply@github.com>
Sun, 8 Oct 2023 00:04:51 +0000 (17:04 -0700)
Misc/NEWS.d/next/Core and Builtins/2023-10-02-23-17-08.gh-issue-110237._Xub0z.rst [new file with mode: 0644]
Python/ceval.c

diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-10-02-23-17-08.gh-issue-110237._Xub0z.rst b/Misc/NEWS.d/next/Core and Builtins/2023-10-02-23-17-08.gh-issue-110237._Xub0z.rst
new file mode 100644 (file)
index 0000000..67b95c5
--- /dev/null
@@ -0,0 +1 @@
+Fix missing error checks for calls to ``PyList_Append`` in ``_PyEval_MatchClass``.
index cae29e061ce5d333f13ac41d1ecf6f30d8149a9a..ac40425263931f295f670a792e3318e17f41b20e 100644 (file)
@@ -506,7 +506,9 @@ _PyEval_MatchClass(PyThreadState *tstate, PyObject *subject, PyObject *type,
         }
         if (match_self) {
             // Easy. Copy the subject itself, and move on to kwargs.
-            PyList_Append(attrs, subject);
+            if (PyList_Append(attrs, subject) < 0) {
+                goto fail;
+            }
         }
         else {
             for (Py_ssize_t i = 0; i < nargs; i++) {
@@ -522,7 +524,10 @@ _PyEval_MatchClass(PyThreadState *tstate, PyObject *subject, PyObject *type,
                 if (attr == NULL) {
                     goto fail;
                 }
-                PyList_Append(attrs, attr);
+                if (PyList_Append(attrs, attr) < 0) {
+                    Py_DECREF(attr);
+                    goto fail;
+                }
                 Py_DECREF(attr);
             }
         }
@@ -535,7 +540,10 @@ _PyEval_MatchClass(PyThreadState *tstate, PyObject *subject, PyObject *type,
         if (attr == NULL) {
             goto fail;
         }
-        PyList_Append(attrs, attr);
+        if (PyList_Append(attrs, attr) < 0) {
+            Py_DECREF(attr);
+            goto fail;
+        }
         Py_DECREF(attr);
     }
     Py_SETREF(attrs, PyList_AsTuple(attrs));