summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2017-09-05 05:23:42 (GMT)
committerGitHub <noreply@github.com>2017-09-05 05:23:42 (GMT)
commita3070d530c70477273cacbc61660b318582fff44 (patch)
tree632003f1a59f22cc2c580401873d1d230b08d92f
parentdb564238db440d4a2d8eb9d60ffb94ef291f6d30 (diff)
downloadcpython-a3070d530c70477273cacbc61660b318582fff44.zip
cpython-a3070d530c70477273cacbc61660b318582fff44.tar.gz
cpython-a3070d530c70477273cacbc61660b318582fff44.tar.bz2
bpo-31347: _PyObject_FastCall_Prepend: do not call memcpy if args might not be null (#3329)
Passing NULL as the second argument to to memcpy is undefined behavior even if the size is 0.
-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) {