Issue #10272: The ssl module now raises socket.timeout instead of a generic
SSLError on socket timeouts.
This commit is contained in:
parent
500be24a64
commit
c4df784514
|
@ -1499,7 +1499,7 @@ else:
|
||||||
c.settimeout(0.2)
|
c.settimeout(0.2)
|
||||||
c.connect((host, port))
|
c.connect((host, port))
|
||||||
# Will attempt handshake and time out
|
# Will attempt handshake and time out
|
||||||
self.assertRaisesRegex(ssl.SSLError, "timed out",
|
self.assertRaisesRegex(socket.timeout, "timed out",
|
||||||
ssl.wrap_socket, c)
|
ssl.wrap_socket, c)
|
||||||
finally:
|
finally:
|
||||||
c.close()
|
c.close()
|
||||||
|
@ -1508,7 +1508,7 @@ else:
|
||||||
c = ssl.wrap_socket(c)
|
c = ssl.wrap_socket(c)
|
||||||
c.settimeout(0.2)
|
c.settimeout(0.2)
|
||||||
# Will attempt handshake and time out
|
# Will attempt handshake and time out
|
||||||
self.assertRaisesRegex(ssl.SSLError, "timed out",
|
self.assertRaisesRegex(socket.timeout, "timed out",
|
||||||
c.connect, (host, port))
|
c.connect, (host, port))
|
||||||
finally:
|
finally:
|
||||||
c.close()
|
c.close()
|
||||||
|
|
|
@ -35,6 +35,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #10272: The ssl module now raises socket.timeout instead of a generic
|
||||||
|
SSLError on socket timeouts.
|
||||||
|
|
||||||
- Issue #10528: Allow translators to reorder placeholders in localizable
|
- Issue #10528: Allow translators to reorder placeholders in localizable
|
||||||
messages from argparse.
|
messages from argparse.
|
||||||
|
|
||||||
|
|
|
@ -370,7 +370,7 @@ static PyObject *PySSL_SSLdo_handshake(PySSLSocket *self)
|
||||||
sockstate = SOCKET_OPERATION_OK;
|
sockstate = SOCKET_OPERATION_OK;
|
||||||
}
|
}
|
||||||
if (sockstate == SOCKET_HAS_TIMED_OUT) {
|
if (sockstate == SOCKET_HAS_TIMED_OUT) {
|
||||||
PyErr_SetString(PySSLErrorObject,
|
PyErr_SetString(PySocketModule.timeout_error,
|
||||||
ERRSTR("The handshake operation timed out"));
|
ERRSTR("The handshake operation timed out"));
|
||||||
goto error;
|
goto error;
|
||||||
} else if (sockstate == SOCKET_HAS_BEEN_CLOSED) {
|
} else if (sockstate == SOCKET_HAS_BEEN_CLOSED) {
|
||||||
|
@ -1075,7 +1075,7 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args)
|
||||||
|
|
||||||
sockstate = check_socket_and_wait_for_timeout(sock, 1);
|
sockstate = check_socket_and_wait_for_timeout(sock, 1);
|
||||||
if (sockstate == SOCKET_HAS_TIMED_OUT) {
|
if (sockstate == SOCKET_HAS_TIMED_OUT) {
|
||||||
PyErr_SetString(PySSLErrorObject,
|
PyErr_SetString(PySocketModule.timeout_error,
|
||||||
"The write operation timed out");
|
"The write operation timed out");
|
||||||
goto error;
|
goto error;
|
||||||
} else if (sockstate == SOCKET_HAS_BEEN_CLOSED) {
|
} else if (sockstate == SOCKET_HAS_BEEN_CLOSED) {
|
||||||
|
@ -1104,7 +1104,7 @@ static PyObject *PySSL_SSLwrite(PySSLSocket *self, PyObject *args)
|
||||||
sockstate = SOCKET_OPERATION_OK;
|
sockstate = SOCKET_OPERATION_OK;
|
||||||
}
|
}
|
||||||
if (sockstate == SOCKET_HAS_TIMED_OUT) {
|
if (sockstate == SOCKET_HAS_TIMED_OUT) {
|
||||||
PyErr_SetString(PySSLErrorObject,
|
PyErr_SetString(PySocketModule.timeout_error,
|
||||||
"The write operation timed out");
|
"The write operation timed out");
|
||||||
goto error;
|
goto error;
|
||||||
} else if (sockstate == SOCKET_HAS_BEEN_CLOSED) {
|
} else if (sockstate == SOCKET_HAS_BEEN_CLOSED) {
|
||||||
|
@ -1211,7 +1211,7 @@ static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args)
|
||||||
if (!count) {
|
if (!count) {
|
||||||
sockstate = check_socket_and_wait_for_timeout(sock, 0);
|
sockstate = check_socket_and_wait_for_timeout(sock, 0);
|
||||||
if (sockstate == SOCKET_HAS_TIMED_OUT) {
|
if (sockstate == SOCKET_HAS_TIMED_OUT) {
|
||||||
PyErr_SetString(PySSLErrorObject,
|
PyErr_SetString(PySocketModule.timeout_error,
|
||||||
"The read operation timed out");
|
"The read operation timed out");
|
||||||
goto error;
|
goto error;
|
||||||
} else if (sockstate == SOCKET_TOO_LARGE_FOR_SELECT) {
|
} else if (sockstate == SOCKET_TOO_LARGE_FOR_SELECT) {
|
||||||
|
@ -1245,7 +1245,7 @@ static PyObject *PySSL_SSLread(PySSLSocket *self, PyObject *args)
|
||||||
sockstate = SOCKET_OPERATION_OK;
|
sockstate = SOCKET_OPERATION_OK;
|
||||||
}
|
}
|
||||||
if (sockstate == SOCKET_HAS_TIMED_OUT) {
|
if (sockstate == SOCKET_HAS_TIMED_OUT) {
|
||||||
PyErr_SetString(PySSLErrorObject,
|
PyErr_SetString(PySocketModule.timeout_error,
|
||||||
"The read operation timed out");
|
"The read operation timed out");
|
||||||
goto error;
|
goto error;
|
||||||
} else if (sockstate == SOCKET_IS_NONBLOCKING) {
|
} else if (sockstate == SOCKET_IS_NONBLOCKING) {
|
||||||
|
@ -1340,10 +1340,10 @@ static PyObject *PySSL_SSLshutdown(PySSLSocket *self)
|
||||||
break;
|
break;
|
||||||
if (sockstate == SOCKET_HAS_TIMED_OUT) {
|
if (sockstate == SOCKET_HAS_TIMED_OUT) {
|
||||||
if (ssl_err == SSL_ERROR_WANT_READ)
|
if (ssl_err == SSL_ERROR_WANT_READ)
|
||||||
PyErr_SetString(PySSLErrorObject,
|
PyErr_SetString(PySocketModule.timeout_error,
|
||||||
"The read operation timed out");
|
"The read operation timed out");
|
||||||
else
|
else
|
||||||
PyErr_SetString(PySSLErrorObject,
|
PyErr_SetString(PySocketModule.timeout_error,
|
||||||
"The write operation timed out");
|
"The write operation timed out");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4358,6 +4358,7 @@ static
|
||||||
PySocketModule_APIObject PySocketModuleAPI =
|
PySocketModule_APIObject PySocketModuleAPI =
|
||||||
{
|
{
|
||||||
&sock_type,
|
&sock_type,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -4425,6 +4426,7 @@ PyInit__socket(void)
|
||||||
socket_error, NULL);
|
socket_error, NULL);
|
||||||
if (socket_timeout == NULL)
|
if (socket_timeout == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
PySocketModuleAPI.timeout_error = socket_timeout;
|
||||||
Py_INCREF(socket_timeout);
|
Py_INCREF(socket_timeout);
|
||||||
PyModule_AddObject(m, "timeout", socket_timeout);
|
PyModule_AddObject(m, "timeout", socket_timeout);
|
||||||
Py_INCREF((PyObject *)&sock_type);
|
Py_INCREF((PyObject *)&sock_type);
|
||||||
|
|
|
@ -196,6 +196,7 @@ typedef struct {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PyTypeObject *Sock_Type;
|
PyTypeObject *Sock_Type;
|
||||||
PyObject *error;
|
PyObject *error;
|
||||||
|
PyObject *timeout_error;
|
||||||
} PySocketModule_APIObject;
|
} PySocketModule_APIObject;
|
||||||
|
|
||||||
#define PySocketModule_ImportModuleAndAPI() PyCapsule_Import(PySocket_CAPSULE_NAME, 1)
|
#define PySocketModule_ImportModuleAndAPI() PyCapsule_Import(PySocket_CAPSULE_NAME, 1)
|
||||||
|
|
Loading…
Reference in New Issue