mirror of
https://github.com/python/cpython.git
synced 2025-12-10 19:10:59 +00:00
bpo-45196: prevent unittest crash on address sanitizer builds (GH-28331)
This commit is contained in:
parent
024fda47d4
commit
b668cdfa09
2 changed files with 20 additions and 3 deletions
|
|
@ -43,6 +43,17 @@ from test.support import warnings_helper
|
||||||
import random
|
import random
|
||||||
import inspect
|
import inspect
|
||||||
import threading
|
import threading
|
||||||
|
import sysconfig
|
||||||
|
_cflags = sysconfig.get_config_var('CFLAGS') or ''
|
||||||
|
_config_args = sysconfig.get_config_var('CONFIG_ARGS') or ''
|
||||||
|
MEMORY_SANITIZER = (
|
||||||
|
'-fsanitize=memory' in _cflags or
|
||||||
|
'--with-memory-sanitizer' in _config_args
|
||||||
|
)
|
||||||
|
|
||||||
|
ADDRESS_SANITIZER = (
|
||||||
|
'-fsanitize=address' in _cflags
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
if sys.platform == 'darwin':
|
if sys.platform == 'darwin':
|
||||||
|
|
@ -5500,6 +5511,8 @@ class CWhitebox(unittest.TestCase):
|
||||||
# Issue 41540:
|
# Issue 41540:
|
||||||
@unittest.skipIf(sys.platform.startswith("aix"),
|
@unittest.skipIf(sys.platform.startswith("aix"),
|
||||||
"AIX: default ulimit: test is flaky because of extreme over-allocation")
|
"AIX: default ulimit: test is flaky because of extreme over-allocation")
|
||||||
|
@unittest.skipIf(MEMORY_SANITIZER or ADDRESS_SANITIZER, "sanitizer defaults to crashing "
|
||||||
|
"instead of returning NULL for malloc failure.")
|
||||||
def test_maxcontext_exact_arith(self):
|
def test_maxcontext_exact_arith(self):
|
||||||
|
|
||||||
# Make sure that exact operations do not raise MemoryError due
|
# Make sure that exact operations do not raise MemoryError due
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,10 @@ MEMORY_SANITIZER = (
|
||||||
'--with-memory-sanitizer' in _config_args
|
'--with-memory-sanitizer' in _config_args
|
||||||
)
|
)
|
||||||
|
|
||||||
|
ADDRESS_SANITIZER = (
|
||||||
|
'-fsanitize=address' in _cflags
|
||||||
|
)
|
||||||
|
|
||||||
# Does io.IOBase finalizer log the exception if the close() method fails?
|
# Does io.IOBase finalizer log the exception if the close() method fails?
|
||||||
# The exception is ignored silently by default in release build.
|
# The exception is ignored silently by default in release build.
|
||||||
IOBASE_EMITS_UNRAISABLE = (hasattr(sys, "gettotalrefcount") or sys.flags.dev_mode)
|
IOBASE_EMITS_UNRAISABLE = (hasattr(sys, "gettotalrefcount") or sys.flags.dev_mode)
|
||||||
|
|
@ -1546,7 +1550,7 @@ class BufferedReaderTest(unittest.TestCase, CommonBufferedTests):
|
||||||
class CBufferedReaderTest(BufferedReaderTest, SizeofTest):
|
class CBufferedReaderTest(BufferedReaderTest, SizeofTest):
|
||||||
tp = io.BufferedReader
|
tp = io.BufferedReader
|
||||||
|
|
||||||
@unittest.skipIf(MEMORY_SANITIZER, "MSan defaults to crashing "
|
@unittest.skipIf(MEMORY_SANITIZER or ADDRESS_SANITIZER, "sanitizer defaults to crashing "
|
||||||
"instead of returning NULL for malloc failure.")
|
"instead of returning NULL for malloc failure.")
|
||||||
def test_constructor(self):
|
def test_constructor(self):
|
||||||
BufferedReaderTest.test_constructor(self)
|
BufferedReaderTest.test_constructor(self)
|
||||||
|
|
@ -1911,7 +1915,7 @@ class BufferedWriterTest(unittest.TestCase, CommonBufferedTests):
|
||||||
class CBufferedWriterTest(BufferedWriterTest, SizeofTest):
|
class CBufferedWriterTest(BufferedWriterTest, SizeofTest):
|
||||||
tp = io.BufferedWriter
|
tp = io.BufferedWriter
|
||||||
|
|
||||||
@unittest.skipIf(MEMORY_SANITIZER, "MSan defaults to crashing "
|
@unittest.skipIf(MEMORY_SANITIZER or ADDRESS_SANITIZER, "sanitizer defaults to crashing "
|
||||||
"instead of returning NULL for malloc failure.")
|
"instead of returning NULL for malloc failure.")
|
||||||
def test_constructor(self):
|
def test_constructor(self):
|
||||||
BufferedWriterTest.test_constructor(self)
|
BufferedWriterTest.test_constructor(self)
|
||||||
|
|
@ -2410,7 +2414,7 @@ class BufferedRandomTest(BufferedReaderTest, BufferedWriterTest):
|
||||||
class CBufferedRandomTest(BufferedRandomTest, SizeofTest):
|
class CBufferedRandomTest(BufferedRandomTest, SizeofTest):
|
||||||
tp = io.BufferedRandom
|
tp = io.BufferedRandom
|
||||||
|
|
||||||
@unittest.skipIf(MEMORY_SANITIZER, "MSan defaults to crashing "
|
@unittest.skipIf(MEMORY_SANITIZER or ADDRESS_SANITIZER, "sanitizer defaults to crashing "
|
||||||
"instead of returning NULL for malloc failure.")
|
"instead of returning NULL for malloc failure.")
|
||||||
def test_constructor(self):
|
def test_constructor(self):
|
||||||
BufferedRandomTest.test_constructor(self)
|
BufferedRandomTest.test_constructor(self)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue