From: Dong-hee Na Date: Tue, 10 Mar 2020 08:14:08 +0000 (+0900) Subject: [3.8] bpo-39828: Fix json.tool to catch BrokenPipeError (GH-18779). (GH-18894) X-Git-Tag: v3.8.3rc1~117 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=caec8a0dfbed04bdb8567782fdff7537529d2232;p=thirdparty%2FPython%2Fcpython.git [3.8] bpo-39828: Fix json.tool to catch BrokenPipeError (GH-18779). (GH-18894) (cherry picked from commit 700cb587303461d5a96456c56902cfdd8ad50e2d) Co-authored-by: Dong-hee Na Automerge-Triggered-By: @vstinner --- diff --git a/Lib/json/tool.py b/Lib/json/tool.py index 8db9ea40ad1b..c42138a05c05 100644 --- a/Lib/json/tool.py +++ b/Lib/json/tool.py @@ -52,4 +52,7 @@ def main(): if __name__ == '__main__': - main() + try: + main() + except BrokenPipeError as exc: + sys.exit(exc.errno) diff --git a/Lib/test/test_json/test_tool.py b/Lib/test/test_json/test_tool.py index f362f1b13a25..a62a5d4084a2 100644 --- a/Lib/test/test_json/test_tool.py +++ b/Lib/test/test_json/test_tool.py @@ -1,7 +1,9 @@ +import errno import os import sys import textwrap import unittest + from subprocess import Popen, PIPE from test import support from test.support.script_helper import assert_python_ok @@ -149,3 +151,12 @@ class TestTool(unittest.TestCase): self.assertEqual(out.splitlines(), self.expect_without_sort_keys.encode().splitlines()) self.assertEqual(err, b'') + + @unittest.skipIf(sys.platform =="win32", "The test is failed with ValueError on Windows") + def test_broken_pipe_error(self): + cmd = [sys.executable, '-m', 'json.tool'] + proc = Popen(cmd, stdout=PIPE, stdin=PIPE) + # bpo-39828: Closing before json.tool attempts to write into stdout. + proc.stdout.close() + proc.communicate(b'"{}"') + self.assertEqual(proc.returncode, errno.EPIPE) diff --git a/Misc/NEWS.d/next/Library/2020-03-05-00-57-49.bpo-39828.yWq9NJ.rst b/Misc/NEWS.d/next/Library/2020-03-05-00-57-49.bpo-39828.yWq9NJ.rst new file mode 100644 index 000000000000..04c61b94c45d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-03-05-00-57-49.bpo-39828.yWq9NJ.rst @@ -0,0 +1 @@ +Fix :mod:`json.tool` to catch :exc:`BrokenPipeError`. Patch by Dong-hee Na.