diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index 38d5012ba46..900b9c96d08 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -436,6 +436,14 @@ def skip_if_sanitizer(reason=None, *, address=False, memory=False, ub=False): return unittest.skipIf(skip, reason) +def set_sanitizer_env_var(env, option): + for name in ('ASAN_OPTIONS', 'MSAN_OPTIONS', 'UBSAN_OPTIONS'): + if name in env: + env[name] += f':{option}' + else: + env[name] = option + + def system_must_validate_cert(f): """Skip the test on TLS certificate validation failures.""" @functools.wraps(f) diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py index 4dce7a7dd8c..0b8299a32b0 100644 --- a/Lib/test/test_faulthandler.py +++ b/Lib/test/test_faulthandler.py @@ -67,11 +67,7 @@ class FaultHandlerTests(unittest.TestCase): # Sanitizers must not handle SIGSEGV (ex: for test_enable_fd()) option = 'handle_segv=0' - for name in ('ASAN_OPTIONS', 'MSAN_OPTIONS', 'UBSAN_OPTIONS'): - if name in env: - env[name] += f':{option}' - else: - env[name] = option + support.set_sanitizer_env_var(env, option) with support.SuppressCrashReport(): process = script_helper.spawn_python('-c', code, diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py index 66463fd2bbe..de2c4317e71 100644 --- a/Lib/test/test_regrtest.py +++ b/Lib/test/test_regrtest.py @@ -674,7 +674,7 @@ class BaseTestCase(unittest.TestCase): if 'stderr' not in kw: kw['stderr'] = subprocess.STDOUT proc = subprocess.run(args, - universal_newlines=True, + text=True, input=input, stdout=subprocess.PIPE, **kw) @@ -756,8 +756,8 @@ class ProgramsTestCase(BaseTestCase): self.check_executed_tests(output, self.tests, randomize=True, stats=len(self.tests)) - def run_tests(self, args): - output = self.run_python(args) + def run_tests(self, args, env=None): + output = self.run_python(args, env=env) self.check_output(output) def test_script_regrtest(self): @@ -2061,7 +2061,14 @@ class ArgsTestCase(BaseTestCase): """) testname = self.create_test(code=code) - output = self.run_tests("-j1", testname, exitcode=EXITCODE_BAD_TEST) + # Sanitizers must not handle SIGSEGV (ex: for test_enable_fd()) + env = dict(os.environ) + option = 'handle_segv=0' + support.set_sanitizer_env_var(env, option) + + output = self.run_tests("-j1", testname, + exitcode=EXITCODE_BAD_TEST, + env=env) self.check_executed_tests(output, testname, failed=[testname], stats=0, parallel=True)