From 30e023256aa1b00d4c783553752fc6f2cc0b9b27 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Sun, 30 Dec 2018 18:09:26 -0800 Subject: [PATCH] Cleanup test_faulthandler sanitizer skip logic. (GH-11381) Also skip the same tests when using the undefined behavior sanitizer as they much with the output. Updates a regex in another test to use multi-line mode so that the ubsan buildbot should pass again rather than also adding a skip to that one. --- Lib/test/test_faulthandler.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py index 76dd6ab068..80b8868a06 100644 --- a/Lib/test/test_faulthandler.py +++ b/Lib/test/test_faulthandler.py @@ -20,11 +20,18 @@ except ImportError: TIMEOUT = 0.5 MS_WINDOWS = (os.name == 'nt') +_cflags = sysconfig.get_config_var('CFLAGS') or '' +_config_args = sysconfig.get_config_var('CONFIG_ARGS') or '' +UB_SANITIZER = ( + '-fsanitizer=undefined' in _cflags or + '--with-undefined-behavior-sanitizer' in _config_args +) MEMORY_SANITIZER = ( - sysconfig.get_config_var("CONFIG_ARGS") and - ("--with-memory-sanitizer" in sysconfig.get_config_var("CONFIG_ARGS")) + '-fsanitizer=memory' in _cflags or + '--with-memory-sanitizer' in _config_args ) + def expected_traceback(lineno1, lineno2, header, min_count=1): regex = header regex += ' File "", line %s in func\n' % lineno1 @@ -99,7 +106,7 @@ class FaultHandlerTests(unittest.TestCase): else: header = 'Stack' regex = r""" - ^{fatal_error} + (?m)^{fatal_error} {header} \(most recent call first\): File "", line {lineno} in @@ -257,8 +264,8 @@ class FaultHandlerTests(unittest.TestCase): 3, 'Segmentation fault') - @unittest.skipIf(MEMORY_SANITIZER, - "memory-sanizer builds change crashing process output.") + @unittest.skipIf(UB_SANITIZER or MEMORY_SANITIZER, + "sanizer builds change crashing process output.") @skip_segfault_on_android def test_enable_file(self): with temporary_filename() as filename: @@ -274,8 +281,8 @@ class FaultHandlerTests(unittest.TestCase): @unittest.skipIf(sys.platform == "win32", "subprocess doesn't support pass_fds on Windows") - @unittest.skipIf(MEMORY_SANITIZER, - "memory-sanizer builds change crashing process output.") + @unittest.skipIf(UB_SANITIZER or MEMORY_SANITIZER, + "sanizer builds change crashing process output.") @skip_segfault_on_android def test_enable_fd(self): with tempfile.TemporaryFile('wb+') as fp: -- 2.40.0