From 114463e7c8f55a090f1ca2b0caf2ad36ed85191b Mon Sep 17 00:00:00 2001 From: Tony Solomonik Date: Sun, 30 Aug 2020 07:53:08 +0300 Subject: [PATCH] closes bpo-41533: Fix a potential memory leak when allocating a stack (GH-21847) Free the stack allocated in va_build_stack if do_mkstack fails and the stack is not a small_stack (cherry picked from commit 75c80b0bda89debf312f075716b8c467d411f90e) Co-authored-by: Tony Solomonik --- .../Core and Builtins/2020-08-12-20-29-57.bpo-41533.4pcVAc.rst | 2 ++ Python/modsupport.c | 3 +++ 2 files changed, 5 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-08-12-20-29-57.bpo-41533.4pcVAc.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-08-12-20-29-57.bpo-41533.4pcVAc.rst b/Misc/NEWS.d/next/Core and Builtins/2020-08-12-20-29-57.bpo-41533.4pcVAc.rst new file mode 100644 index 00000000000000..e166f0c0b621a4 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-08-12-20-29-57.bpo-41533.4pcVAc.rst @@ -0,0 +1,2 @@ +Free the stack allocated in ``va_build_stack`` if ``do_mkstack`` fails and +the stack is not a ``small_stack``. diff --git a/Python/modsupport.c b/Python/modsupport.c index 845bdcb2b6f1b3..13482c65083ffa 100644 --- a/Python/modsupport.c +++ b/Python/modsupport.c @@ -619,6 +619,9 @@ va_build_stack(PyObject **small_stack, Py_ssize_t small_stack_len, va_end(lva); if (res < 0) { + if (stack != small_stack) { + PyMem_Free(stack); + } return NULL; }