]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
gh-144503: Pass sys.argv to forkserver as real argv elements (GH-148194)
authorGregory P. Smith <68491+gpshead@users.noreply.github.com>
Tue, 7 Apr 2026 05:41:02 +0000 (22:41 -0700)
committerGitHub <noreply@github.com>
Tue, 7 Apr 2026 05:41:02 +0000 (22:41 -0700)
commit5e9d90b615b94469081b39a7b0808fea86c417be
tree4559f8577717032c5c2fe8fa41b4af23c23ba243
parent6bb7b33e8f8e1640e284aeb24bf90292df6a8187
gh-144503: Pass sys.argv to forkserver as real argv elements (GH-148194)

Avoid embedding the parent's sys.argv into the forkserver -c command
string via repr().  When sys.argv is large (e.g. thousands of file
paths from a pre-commit hook), the resulting single argument could
exceed the OS per-argument length limit (MAX_ARG_STRLEN on Linux,
typically 128 KiB), causing posix_spawn to fail and the parent to
observe a BrokenPipeError.

Instead, append the argv entries as separate command-line arguments
after -c; the forkserver child reads them back as sys.argv[1:].  This
cannot exceed any limit the parent itself did not already satisfy.

Regression introduced by gh-143706 / 298d5440eb8.
Lib/multiprocessing/forkserver.py
Lib/test/_test_multiprocessing.py
Lib/test/mp_preload_large_sysargv.py [new file with mode: 0644]
Misc/NEWS.d/next/Library/2026-04-07-01-04-00.gh-issue-144503.argvfs.rst [new file with mode: 0644]