mirror of
https://github.com/python/cpython.git
synced 2025-08-22 09:45:06 +00:00
bpo-46913: Fix test_faulthandler.test_read_null() on UBSan (GH31672)
Disable undefined behavior sanitizer (UBSan) on faulthandler._read_null().
This commit is contained in:
parent
32f0c82717
commit
65b92ccdec
1 changed files with 18 additions and 16 deletions
|
@ -32,6 +32,23 @@
|
||||||
|
|
||||||
#define PUTS(fd, str) _Py_write_noraise(fd, str, strlen(str))
|
#define PUTS(fd, str) _Py_write_noraise(fd, str, strlen(str))
|
||||||
|
|
||||||
|
|
||||||
|
// clang uses __attribute__((no_sanitize("undefined")))
|
||||||
|
// GCC 4.9+ uses __attribute__((no_sanitize_undefined))
|
||||||
|
#if defined(__has_feature) // Clang
|
||||||
|
# if __has_feature(undefined_behavior_sanitizer)
|
||||||
|
# define _Py_NO_SANITIZE_UNDEFINED __attribute__((no_sanitize("undefined")))
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#if defined(__GNUC__) \
|
||||||
|
&& ((__GNUC__ >= 5) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 9))
|
||||||
|
# define _Py_NO_SANITIZE_UNDEFINED __attribute__((no_sanitize_undefined))
|
||||||
|
#endif
|
||||||
|
#ifndef _Py_NO_SANITIZE_UNDEFINED
|
||||||
|
# define _Py_NO_SANITIZE_UNDEFINED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_SIGACTION
|
#ifdef HAVE_SIGACTION
|
||||||
typedef struct sigaction _Py_sighandler_t;
|
typedef struct sigaction _Py_sighandler_t;
|
||||||
#else
|
#else
|
||||||
|
@ -1013,7 +1030,7 @@ faulthandler_suppress_crash_report(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject* _Py_NO_SANITIZE_UNDEFINED
|
||||||
faulthandler_read_null(PyObject *self, PyObject *args)
|
faulthandler_read_null(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
volatile int *x;
|
volatile int *x;
|
||||||
|
@ -1102,21 +1119,6 @@ faulthandler_fatal_error_c_thread(PyObject *self, PyObject *args)
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// clang uses __attribute__((no_sanitize("undefined")))
|
|
||||||
// GCC 4.9+ uses __attribute__((no_sanitize_undefined))
|
|
||||||
#if defined(__has_feature) // Clang
|
|
||||||
# if __has_feature(undefined_behavior_sanitizer)
|
|
||||||
# define _Py_NO_SANITIZE_UNDEFINED __attribute__((no_sanitize("undefined")))
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#if defined(__GNUC__) \
|
|
||||||
&& ((__GNUC__ >= 5) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 9))
|
|
||||||
# define _Py_NO_SANITIZE_UNDEFINED __attribute__((no_sanitize_undefined))
|
|
||||||
#endif
|
|
||||||
#ifndef _Py_NO_SANITIZE_UNDEFINED
|
|
||||||
# define _Py_NO_SANITIZE_UNDEFINED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static PyObject* _Py_NO_SANITIZE_UNDEFINED
|
static PyObject* _Py_NO_SANITIZE_UNDEFINED
|
||||||
faulthandler_sigfpe(PyObject *self, PyObject *args)
|
faulthandler_sigfpe(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue