Skip to content

Commit

Permalink
bpo-44363: Get test_capi passing with address sanitizer (pythonGH-26639)
Browse files Browse the repository at this point in the history
  • Loading branch information
markshannon committed Jun 10, 2021
1 parent 54cb638 commit 31aa0db
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 1 deletion.
11 changes: 10 additions & 1 deletion Include/Python.h
Expand Up @@ -63,13 +63,22 @@
#include "pyport.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 __has_feature(memory_sanitizer)
# if !defined(_Py_MEMORY_SANITIZER)
# define _Py_MEMORY_SANITIZER
# 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

#include "pymath.h"
Expand Down
@@ -0,0 +1,2 @@
Account for address sanitizer in test_capi. test_capi now passes when run
GCC address sanitizer.
5 changes: 5 additions & 0 deletions Modules/_testcapimodule.c
Expand Up @@ -4784,6 +4784,10 @@ check_pyobject_forbidden_bytes_is_freed(PyObject *self, PyObject *Py_UNUSED(args
static PyObject*
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);
if (op == NULL) {
return NULL;
Expand All @@ -4793,6 +4797,7 @@ check_pyobject_freed_is_freed(PyObject *self, PyObject *Py_UNUSED(args))
Py_SET_REFCNT(op, 1);
/* object memory is freed! */
return test_pyobject_is_freed("check_pyobject_freed_is_freed", op);
#endif
}


Expand Down

0 comments on commit 31aa0db

Please sign in to comment.