diff options
| author | Victor Stinner <vstinner@python.org> | 2020-03-25 19:27:36 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-25 19:27:36 +0100 |
| commit | 87d3b9db4ade1aa100ee6f065082cb7e85b8992f (patch) | |
| tree | 85d17fff35bc28beb4a7c6e3a82276f2fa3760d5 /Objects | |
| parent | ace018ca47c03ca699603341b12781b5329d2eaa (diff) | |
| download | cpython-git-87d3b9db4ade1aa100ee6f065082cb7e85b8992f.tar.gz | |
bpo-39882: Add _Py_FatalErrorFormat() function (GH-19157)
Diffstat (limited to 'Objects')
| -rw-r--r-- | Objects/call.c | 6 | ||||
| -rw-r--r-- | Objects/frameobject.c | 10 | ||||
| -rw-r--r-- | Objects/obmalloc.c | 32 |
3 files changed, 21 insertions, 27 deletions
diff --git a/Objects/call.c b/Objects/call.c index 37d079d169..0861414324 100644 --- a/Objects/call.c +++ b/Objects/call.c @@ -46,7 +46,8 @@ _Py_CheckFunctionResult(PyThreadState *tstate, PyObject *callable, "%s returned NULL without setting an error", where); #ifdef Py_DEBUG - /* Ensure that the bug is caught in debug mode */ + /* Ensure that the bug is caught in debug mode. + Py_FatalError() logs the SystemError exception raised above. */ Py_FatalError("a function returned NULL without setting an error"); #endif return NULL; @@ -67,7 +68,8 @@ _Py_CheckFunctionResult(PyThreadState *tstate, PyObject *callable, "%s returned a result with an error set", where); } #ifdef Py_DEBUG - /* Ensure that the bug is caught in debug mode */ + /* Ensure that the bug is caught in debug mode. + Py_FatalError() logs the SystemError exception raised above. */ Py_FatalError("a function returned a result with an error set"); #endif return NULL; diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 64f5754fe2..340267bd47 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -957,8 +957,9 @@ void PyFrame_BlockSetup(PyFrameObject *f, int type, int handler, int level) { PyTryBlock *b; - if (f->f_iblock >= CO_MAXBLOCKS) - Py_FatalError("XXX block stack overflow"); + if (f->f_iblock >= CO_MAXBLOCKS) { + Py_FatalError("block stack overflow"); + } b = &f->f_blockstack[f->f_iblock++]; b->b_type = type; b->b_level = level; @@ -969,8 +970,9 @@ PyTryBlock * PyFrame_BlockPop(PyFrameObject *f) { PyTryBlock *b; - if (f->f_iblock <= 0) - Py_FatalError("XXX block stack underflow"); + if (f->f_iblock <= 0) { + Py_FatalError("block stack underflow"); + } b = &f->f_blockstack[--f->f_iblock]; return b; } diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c index 3b574bffd8..3f6f9cf9ca 100644 --- a/Objects/obmalloc.c +++ b/Objects/obmalloc.c @@ -2361,26 +2361,22 @@ _PyMem_DebugRealloc(void *ctx, void *ptr, size_t nbytes) static void _PyMem_DebugCheckAddress(const char *func, char api, const void *p) { + assert(p != NULL); + const uint8_t *q = (const uint8_t *)p; - char msgbuf[64]; - const char *msg; size_t nbytes; const uint8_t *tail; int i; char id; - if (p == NULL) { - msg = "didn't expect a NULL pointer"; - goto error; - } - /* Check the API id */ id = (char)q[-SST]; if (id != api) { - msg = msgbuf; - snprintf(msgbuf, sizeof(msgbuf), "bad ID: Allocated using API '%c', verified using API '%c'", id, api); - msgbuf[sizeof(msgbuf)-1] = 0; - goto error; + _PyObject_DebugDumpAddress(p); + _Py_FatalErrorFormat(func, + "bad ID: Allocated using API '%c', " + "verified using API '%c'", + id, api); } /* Check the stuff at the start of p first: if there's underwrite @@ -2389,8 +2385,8 @@ _PyMem_DebugCheckAddress(const char *func, char api, const void *p) */ for (i = SST-1; i >= 1; --i) { if (*(q-i) != PYMEM_FORBIDDENBYTE) { - msg = "bad leading pad byte"; - goto error; + _PyObject_DebugDumpAddress(p); + _Py_FatalErrorFunc(func, "bad leading pad byte"); } } @@ -2398,16 +2394,10 @@ _PyMem_DebugCheckAddress(const char *func, char api, const void *p) tail = q + nbytes; for (i = 0; i < SST; ++i) { if (tail[i] != PYMEM_FORBIDDENBYTE) { - msg = "bad trailing pad byte"; - goto error; + _PyObject_DebugDumpAddress(p); + _Py_FatalErrorFunc(func, "bad trailing pad byte"); } } - - return; - -error: - _PyObject_DebugDumpAddress(p); - _Py_FatalErrorFunc(func, msg); } /* Display info to stderr about the memory block at p. */ |
