mirror of https://github.com/python/cpython.git
gh-105375: Improve error handling in _ctypes (#105593)
Prevent repeated PyLong_FromVoidPtr() from possibly overwriting the current exception.
This commit is contained in:
parent
555be81026
commit
e8998e46a7
|
@ -0,0 +1 @@
|
|||
Fix bugs in :mod:`_ctypes` where exceptions could end up being overwritten.
|
|
@ -479,12 +479,22 @@ long Call_GetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
|
|||
|
||||
{
|
||||
PyObject *py_rclsid = PyLong_FromVoidPtr((void *)rclsid);
|
||||
if (py_rclsid == NULL) {
|
||||
Py_DECREF(func);
|
||||
PyErr_WriteUnraisable(context ? context : Py_None);
|
||||
return E_FAIL;
|
||||
}
|
||||
PyObject *py_riid = PyLong_FromVoidPtr((void *)riid);
|
||||
if (py_riid == NULL) {
|
||||
Py_DECREF(func);
|
||||
Py_DECREF(py_rclsid);
|
||||
PyErr_WriteUnraisable(context ? context : Py_None);
|
||||
return E_FAIL;
|
||||
}
|
||||
PyObject *py_ppv = PyLong_FromVoidPtr(ppv);
|
||||
if (!py_rclsid || !py_riid || !py_ppv) {
|
||||
Py_XDECREF(py_rclsid);
|
||||
Py_XDECREF(py_riid);
|
||||
Py_XDECREF(py_ppv);
|
||||
if (py_ppv == NULL) {
|
||||
Py_DECREF(py_rclsid);
|
||||
Py_DECREF(py_riid);
|
||||
Py_DECREF(func);
|
||||
PyErr_WriteUnraisable(context ? context : Py_None);
|
||||
return E_FAIL;
|
||||
|
|
Loading…
Reference in New Issue