diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-02-23 17:26:43 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-23 17:26:43 (GMT) |
commit | 561ca80cffd37445bac82ff820b8f52b98c50517 (patch) | |
tree | 54cb4548eb710ebda5e6cc5e896ef1f9ac2dc3ad | |
parent | 324c5d8ca6ed1c964d3b20e5762139ec65c7827c (diff) | |
download | cpython-561ca80cffd37445bac82ff820b8f52b98c50517.zip cpython-561ca80cffd37445bac82ff820b8f52b98c50517.tar.gz cpython-561ca80cffd37445bac82ff820b8f52b98c50517.tar.bz2 |
Document why functools.partial() must copy kwargs (#253)
Add a comment to prevent further attempts to avoid a copy for
optimization.
-rw-r--r-- | Modules/_functoolsmodule.c | 3 | ||||
-rw-r--r-- | Objects/call.c | 4 |
2 files changed, 5 insertions, 2 deletions
diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index c856505..dcaa99f 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -163,6 +163,9 @@ partial_call(partialobject *pto, PyObject *args, PyObject *kw) Py_XINCREF(kwappl); } else { + /* bpo-27840, bpo-29318: dictionary of keyword parameters must be + copied, because a function using "**kwargs" can modify the + dictionary. */ kwappl = PyDict_Copy(pto->kw); if (kwappl == NULL) { Py_XDECREF(argappl); diff --git a/Objects/call.c b/Objects/call.c index bc32090..310b4a2 100644 --- a/Objects/call.c +++ b/Objects/call.c @@ -317,8 +317,8 @@ _PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, if (nk != 0) { Py_ssize_t pos, i; - /* Issue #29318: Caller and callee functions must not share the - dictionary: kwargs must be copied. */ + /* bpo-29318, bpo-27840: Caller and callee functions must not share + the dictionary: kwargs must be copied. */ kwtuple = PyTuple_New(2 * nk); if (kwtuple == NULL) { return NULL; |