bpo-44363: Get test_capi passing with address sanitizer (GH-26639)
This commit is contained in:
parent
54cb63863f
commit
31aa0dbff4
@ -63,13 +63,22 @@
|
|||||||
#include "pyport.h"
|
#include "pyport.h"
|
||||||
#include "pymacro.h"
|
#include "pymacro.h"
|
||||||
|
|
||||||
/* A convenient way for code to know if clang's memory sanitizer is enabled. */
|
/* A convenient way for code to know if sanitizers are enabled. */
|
||||||
#if defined(__has_feature)
|
#if defined(__has_feature)
|
||||||
# if __has_feature(memory_sanitizer)
|
# if __has_feature(memory_sanitizer)
|
||||||
# if !defined(_Py_MEMORY_SANITIZER)
|
# if !defined(_Py_MEMORY_SANITIZER)
|
||||||
# define _Py_MEMORY_SANITIZER
|
# define _Py_MEMORY_SANITIZER
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
# if __has_feature(address_sanitizer)
|
||||||
|
# if !defined(_Py_ADDRESS_SANITIZER)
|
||||||
|
# define _Py_ADDRESS_SANITIZER
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
# if defined(__SANITIZE_ADDRESS__)
|
||||||
|
# define _Py_ADDRESS_SANITIZER
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "pymath.h"
|
#include "pymath.h"
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
Account for address sanitizer in test_capi. test_capi now passes when run
|
||||||
|
GCC address sanitizer.
|
@ -4784,6 +4784,10 @@ check_pyobject_forbidden_bytes_is_freed(PyObject *self, PyObject *Py_UNUSED(args
|
|||||||
static PyObject*
|
static PyObject*
|
||||||
check_pyobject_freed_is_freed(PyObject *self, PyObject *Py_UNUSED(args))
|
check_pyobject_freed_is_freed(PyObject *self, PyObject *Py_UNUSED(args))
|
||||||
{
|
{
|
||||||
|
/* This test would fail if run with the address sanitizer */
|
||||||
|
#ifdef _Py_ADDRESS_SANITIZER
|
||||||
|
Py_RETURN_NONE;
|
||||||
|
#else
|
||||||
PyObject *op = _PyObject_CallNoArg((PyObject *)&PyBaseObject_Type);
|
PyObject *op = _PyObject_CallNoArg((PyObject *)&PyBaseObject_Type);
|
||||||
if (op == NULL) {
|
if (op == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -4793,6 +4797,7 @@ check_pyobject_freed_is_freed(PyObject *self, PyObject *Py_UNUSED(args))
|
|||||||
Py_SET_REFCNT(op, 1);
|
Py_SET_REFCNT(op, 1);
|
||||||
/* object memory is freed! */
|
/* object memory is freed! */
|
||||||
return test_pyobject_is_freed("check_pyobject_freed_is_freed", op);
|
return test_pyobject_is_freed("check_pyobject_freed_is_freed", op);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user