Skip to content

Commit

Permalink
bpo-29941: Assert fixes (python#886)
Browse files Browse the repository at this point in the history
Make a non-Py_DEBUG, asserts-enabled build of CPython possible. This means
making sure helper functions are defined when NDEBUG is not defined, not
just when Py_DEBUG is defined.

Also fix a division-by-zero in obmalloc.c that went unnoticed because in Py_DEBUG mode, elsize is never zero.
  • Loading branch information
Yhg1s committed Mar 31, 2017
1 parent 164d30e commit a00c3fd
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 5 deletions.
4 changes: 4 additions & 0 deletions Include/unicodeobject.h
Original file line number Diff line number Diff line change
Expand Up @@ -2313,6 +2313,10 @@ PyAPI_FUNC(Py_UNICODE*) PyUnicode_AsUnicodeCopy(
PyAPI_FUNC(int) _PyUnicode_CheckConsistency(
PyObject *op,
int check_content);
#elif !defined(NDEBUG)
/* For asserts that call _PyUnicode_CheckConsistency(), which would
* otherwise be a problem when building with asserts but without Py_DEBUG. */
#define _PyUnicode_CheckConsistency(op, check_content) PyUnicode_Check(op)
#endif

#ifndef Py_LIMITED_API
Expand Down
2 changes: 1 addition & 1 deletion Objects/dictobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,7 @@ static PyObject *empty_values[1] = { NULL };
/* #define DEBUG_PYDICT */


#ifdef Py_DEBUG
#ifndef NDEBUG
static int
_PyDict_CheckConsistency(PyDictObject *mp)
{
Expand Down
6 changes: 3 additions & 3 deletions Objects/obmalloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1227,6 +1227,9 @@ _PyObject_Alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize)

_Py_AllocatedBlocks++;

if (nelem == 0 || elsize == 0)
goto redirect;

assert(nelem <= PY_SSIZE_T_MAX / elsize);
nbytes = nelem * elsize;

Expand All @@ -1237,9 +1240,6 @@ _PyObject_Alloc(int use_calloc, void *ctx, size_t nelem, size_t elsize)
goto redirect;
#endif

if (nelem == 0 || elsize == 0)
goto redirect;

if ((nbytes - 1) < SMALL_REQUEST_THRESHOLD) {
LOCK();
/*
Expand Down
2 changes: 1 addition & 1 deletion Objects/typeobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ skip_signature(const char *doc)
return NULL;
}

#ifdef Py_DEBUG
#ifndef NDEBUG
static int
_PyType_CheckConsistency(PyTypeObject *type)
{
Expand Down

0 comments on commit a00c3fd

Please sign in to comment.