[Python-checkins] Fix test_faulthandler for sanitizers (#108245)
vstinner
webhook-mailer at python.org
Mon Aug 21 21:16:15 EDT 2023
https://github.com/python/cpython/commit/58f9c635002673e35a56eeaa122cade7a2b6bae1
commit: 58f9c635002673e35a56eeaa122cade7a2b6bae1
branch: main
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2023-08-22T01:16:12Z
summary:
Fix test_faulthandler for sanitizers (#108245)
Set environment options to ask sanitizers to not handle SIGSEGV.
This change allows running test_enable_fd() and test_enable_file()
with sanitizers. Previously, they were skipped.
files:
M Lib/test/test_faulthandler.py
diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py
index 2e97de592712c..907c2cda86cba 100644
--- a/Lib/test/test_faulthandler.py
+++ b/Lib/test/test_faulthandler.py
@@ -9,7 +9,6 @@
from test import support
from test.support import os_helper
from test.support import script_helper, is_android
-from test.support import skip_if_sanitizer
import tempfile
import unittest
from textwrap import dedent
@@ -64,8 +63,20 @@ def get_output(self, code, filename=None, fd=None):
pass_fds = []
if fd is not None:
pass_fds.append(fd)
+ env = dict(os.environ)
+
+ # 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
+
with support.SuppressCrashReport():
- process = script_helper.spawn_python('-c', code, pass_fds=pass_fds)
+ process = script_helper.spawn_python('-c', code,
+ pass_fds=pass_fds,
+ env=env)
with process:
output, stderr = process.communicate()
exitcode = process.wait()
@@ -304,8 +315,6 @@ def test_gil_released(self):
3,
'Segmentation fault')
- @skip_if_sanitizer(memory=True, ub=True, reason="sanitizer "
- "builds change crashing process output.")
@skip_segfault_on_android
def test_enable_file(self):
with temporary_filename() as filename:
@@ -321,8 +330,6 @@ def test_enable_file(self):
@unittest.skipIf(sys.platform == "win32",
"subprocess doesn't support pass_fds on Windows")
- @skip_if_sanitizer(memory=True, ub=True, reason="sanitizer "
- "builds change crashing process output.")
@skip_segfault_on_android
def test_enable_fd(self):
with tempfile.TemporaryFile('wb+') as fp:
More information about the Python-checkins
mailing list