From: Mark Shannon Date: Sat, 10 Sep 2022 00:12:06 +0000 (+0100) Subject: GH-96678: Fix undefined behavior in ceval.c (#96708) X-Git-Tag: v3.12.0a1~435 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=50a70a083d34305a52fac4f5901bff2ead152d68;p=thirdparty%2FPython%2Fcpython.git GH-96678: Fix undefined behavior in ceval.c (#96708) --- diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-09-09-13-13-27.gh-issue-96678.vMxi9F.rst b/Misc/NEWS.d/next/Core and Builtins/2022-09-09-13-13-27.gh-issue-96678.vMxi9F.rst new file mode 100644 index 000000000000..575b52be2940 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2022-09-09-13-13-27.gh-issue-96678.vMxi9F.rst @@ -0,0 +1 @@ +Fix case of undefined behavior in ceval.c diff --git a/Python/ceval.c b/Python/ceval.c index 7d4543ea03d9..20d0e1c50a5f 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -5532,7 +5532,13 @@ initialize_locals(PyThreadState *tstate, PyFunctionObject *func, /* Pack other positional arguments into the *args argument */ if (co->co_flags & CO_VARARGS) { PyObject *u = NULL; - u = _PyTuple_FromArraySteal(args + n, argcount - n); + if (argcount == n) { + u = Py_NewRef(&_Py_SINGLETON(tuple_empty)); + } + else { + assert(args != NULL); + u = _PyTuple_FromArraySteal(args + n, argcount - n); + } if (u == NULL) { goto fail_post_positional; }