summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2017-09-04-16-35-06.bpo-31347.KDuf2w.rst1
-rw-r--r--Objects/call.c6
2 files changed, 4 insertions, 3 deletions
diff --git a/Misc/NEWS.d/next/Core and Builtins/2017-09-04-16-35-06.bpo-31347.KDuf2w.rst b/Misc/NEWS.d/next/Core and Builtins/2017-09-04-16-35-06.bpo-31347.KDuf2w.rst
new file mode 100644
index 0000000..52a6168
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2017-09-04-16-35-06.bpo-31347.KDuf2w.rst
@@ -0,0 +1 @@
+Fix possible undefined behavior in _PyObject_FastCall_Prepend.
diff --git a/Objects/call.c b/Objects/call.c
index 4294a9b..9246432 100644
--- a/Objects/call.c
+++ b/Objects/call.c
@@ -854,9 +854,9 @@ _PyObject_FastCall_Prepend(PyObject *callable,
/* use borrowed references */
args2[0] = obj;
- memcpy(&args2[1],
- args,
- (nargs - 1)* sizeof(PyObject *));
+ if (nargs > 1) {
+ memcpy(&args2[1], args, (nargs - 1) * sizeof(PyObject *));
+ }
result = _PyObject_FastCall(callable, args2, nargs);
if (args2 != small_stack) {