mirror of
https://github.com/python/cpython.git
synced 2025-07-24 03:35:53 +00:00
[3.11] gh-105375: Improve PyErr_WarnExplicit() error handling (GH-105610) (#105660)
Bail on first error to prevent exceptions from possibly being
overwritten.
(cherry picked from commit 567d6ae8e7
)
Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
This commit is contained in:
parent
87e493b11a
commit
05c73e1cd8
2 changed files with 18 additions and 12 deletions
|
@ -0,0 +1,2 @@
|
|||
Fix a bug in :c:func:`PyErr_WarnExplicit` where an exception could end up
|
||||
being overwritten if the API failed internally.
|
|
@ -1231,25 +1231,29 @@ PyErr_WarnExplicit(PyObject *category, const char *text,
|
|||
const char *module_str, PyObject *registry)
|
||||
{
|
||||
PyObject *message = PyUnicode_FromString(text);
|
||||
if (message == NULL) {
|
||||
return -1;
|
||||
}
|
||||
PyObject *filename = PyUnicode_DecodeFSDefault(filename_str);
|
||||
if (filename == NULL) {
|
||||
Py_DECREF(message);
|
||||
return -1;
|
||||
}
|
||||
PyObject *module = NULL;
|
||||
int ret = -1;
|
||||
|
||||
if (message == NULL || filename == NULL)
|
||||
goto exit;
|
||||
if (module_str != NULL) {
|
||||
module = PyUnicode_FromString(module_str);
|
||||
if (module == NULL)
|
||||
goto exit;
|
||||
if (module == NULL) {
|
||||
Py_DECREF(filename);
|
||||
Py_DECREF(message);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
ret = PyErr_WarnExplicitObject(category, message, filename, lineno,
|
||||
module, registry);
|
||||
|
||||
exit:
|
||||
Py_XDECREF(message);
|
||||
int ret = PyErr_WarnExplicitObject(category, message, filename, lineno,
|
||||
module, registry);
|
||||
Py_XDECREF(module);
|
||||
Py_XDECREF(filename);
|
||||
Py_DECREF(filename);
|
||||
Py_DECREF(message);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue