diff options
author | Benjamin Peterson <benjamin@python.org> | 2017-09-05 05:23:42 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-05 05:23:42 (GMT) |
commit | a3070d530c70477273cacbc61660b318582fff44 (patch) | |
tree | 632003f1a59f22cc2c580401873d1d230b08d92f | |
parent | db564238db440d4a2d8eb9d60ffb94ef291f6d30 (diff) | |
download | cpython-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.rst | 1 | ||||
-rw-r--r-- | Objects/call.c | 6 |
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) { |