summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>2023-03-16 16:41:10 (GMT)
committerGitHub <noreply@github.com>2023-03-16 16:41:10 (GMT)
commite108af6eca9904d177d769281907d12ac6894dfc (patch)
tree6a3ce53e72ad386f6e43c2607e334ea824572f45
parent61d6c110d6019a7ba79c76cc50aeaa85a1b37c08 (diff)
downloadcpython-e108af6eca9904d177d769281907d12ac6894dfc.zip
cpython-e108af6eca9904d177d769281907d12ac6894dfc.tar.gz
cpython-e108af6eca9904d177d769281907d12ac6894dfc.tar.bz2
gh-102192: remove redundant exception fields from ssl module socket (#102466)
-rw-r--r--Modules/_ssl.c28
-rw-r--r--Modules/_ssl/debughelpers.c7
2 files changed, 12 insertions, 23 deletions
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index 2811231..121d188 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -318,9 +318,7 @@ typedef struct {
* store exception information on the socket. The handshake, read, write,
* and shutdown methods check for chained exceptions.
*/
- PyObject *exc_type;
- PyObject *exc_value;
- PyObject *exc_tb;
+ PyObject *exc;
} PySSLSocket;
typedef struct {
@@ -564,13 +562,11 @@ fail:
static int
PySSL_ChainExceptions(PySSLSocket *sslsock) {
- if (sslsock->exc_type == NULL)
+ if (sslsock->exc == NULL)
return 0;
- _PyErr_ChainExceptions(sslsock->exc_type, sslsock->exc_value, sslsock->exc_tb);
- sslsock->exc_type = NULL;
- sslsock->exc_value = NULL;
- sslsock->exc_tb = NULL;
+ _PyErr_ChainExceptions1(sslsock->exc);
+ sslsock->exc = NULL;
return -1;
}
@@ -807,9 +803,7 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock,
self->owner = NULL;
self->server_hostname = NULL;
self->err = err;
- self->exc_type = NULL;
- self->exc_value = NULL;
- self->exc_tb = NULL;
+ self->exc = NULL;
/* Make sure the SSL error state is initialized */
ERR_clear_error();
@@ -2179,9 +2173,7 @@ Passed as \"self\" in servername callback.");
static int
PySSL_traverse(PySSLSocket *self, visitproc visit, void *arg)
{
- Py_VISIT(self->exc_type);
- Py_VISIT(self->exc_value);
- Py_VISIT(self->exc_tb);
+ Py_VISIT(self->exc);
Py_VISIT(Py_TYPE(self));
return 0;
}
@@ -2189,9 +2181,7 @@ PySSL_traverse(PySSLSocket *self, visitproc visit, void *arg)
static int
PySSL_clear(PySSLSocket *self)
{
- Py_CLEAR(self->exc_type);
- Py_CLEAR(self->exc_value);
- Py_CLEAR(self->exc_tb);
+ Py_CLEAR(self->exc);
return 0;
}
@@ -2536,7 +2526,7 @@ _ssl__SSLSocket_read_impl(PySSLSocket *self, Py_ssize_t len,
PySSL_SetError(self, retval, __FILE__, __LINE__);
goto error;
}
- if (self->exc_type != NULL)
+ if (self->exc != NULL)
goto error;
done:
@@ -2662,7 +2652,7 @@ _ssl__SSLSocket_shutdown_impl(PySSLSocket *self)
PySSL_SetError(self, ret, __FILE__, __LINE__);
return NULL;
}
- if (self->exc_type != NULL)
+ if (self->exc != NULL)
goto error;
if (sock)
/* It's already INCREF'ed */
diff --git a/Modules/_ssl/debughelpers.c b/Modules/_ssl/debughelpers.c
index 08f3457..217f224 100644
--- a/Modules/_ssl/debughelpers.c
+++ b/Modules/_ssl/debughelpers.c
@@ -74,7 +74,7 @@ _PySSL_msg_callback(int write_p, int version, int content_type,
buf, len
);
if (res == NULL) {
- PyErr_Fetch(&ssl_obj->exc_type, &ssl_obj->exc_value, &ssl_obj->exc_tb);
+ ssl_obj->exc = PyErr_GetRaisedException();
} else {
Py_DECREF(res);
}
@@ -138,8 +138,7 @@ _PySSL_keylog_callback(const SSL *ssl, const char *line)
lock = PyThread_allocate_lock();
if (lock == NULL) {
PyErr_SetString(PyExc_MemoryError, "Unable to allocate lock");
- PyErr_Fetch(&ssl_obj->exc_type, &ssl_obj->exc_value,
- &ssl_obj->exc_tb);
+ ssl_obj->exc = PyErr_GetRaisedException();
return;
}
}
@@ -156,7 +155,7 @@ _PySSL_keylog_callback(const SSL *ssl, const char *line)
errno = e;
PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError,
ssl_obj->ctx->keylog_filename);
- PyErr_Fetch(&ssl_obj->exc_type, &ssl_obj->exc_value, &ssl_obj->exc_tb);
+ ssl_obj->exc = PyErr_GetRaisedException();
}
PyGILState_Release(threadstate);
}