From 0d207fd8cf2d620f8ade647c932cdb1117c544e1 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Mon, 11 Jan 2016 13:56:42 -0800 Subject: Fixes issue #26083: Workaround a subprocess bug that raised an incorrect "ValueError: insecure string pickle" exception instead of the actual exception on some platforms such as Mac OS X when an exception raised in the forked child process prior to the exec() was large enough that it overflowed the internal errpipe_read pipe buffer. --- Lib/subprocess.py | 6 +++++- Misc/NEWS | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Lib/subprocess.py b/Lib/subprocess.py index 4e7b064..78189f4 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -1313,8 +1313,12 @@ class Popen(object): os.close(errpipe_write) # Wait for exec to fail or succeed; possibly raising exception - # Exception limited to 1M data = _eintr_retry_call(os.read, errpipe_read, 1048576) + pickle_bits = [data] + while data: + pickle_bits.append(data) + data = _eintr_retry_call(os.read, errpipe_read, 1048576) + data = "".join(pickle_bits) finally: if p2cread is not None and p2cwrite is not None: _close_in_parent(p2cread) diff --git a/Misc/NEWS b/Misc/NEWS index f74c184..e533d55 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -39,6 +39,12 @@ Core and Builtins Library ------- +- Issue #26083: Workaround a subprocess bug that raises an incorrect + "ValueError: insecure string pickle" exception instead of the actual + exception on some platforms such as Mac OS X when an exception raised + in the forked child process prior to the exec() was large enough that + it overflowed the internal errpipe_read pipe buffer. + - Issue #24103: Fixed possible use after free in ElementTree.iterparse(). - Issue #20954: _args_from_interpreter_flags used by multiprocessing and some -- cgit v0.12