mirror of
https://github.com/python/cpython.git
synced 2024-11-23 18:04:37 +08:00
bpo-42854: Correctly use size_t for _ssl._SSLSocket.read and _ssl._SSLSocket.write (GH-27271)
This commit is contained in:
parent
8f42106b5c
commit
83d1430ee5
@ -0,0 +1,3 @@
|
|||||||
|
Fixed a bug in the :mod:`_ssl` module that was throwing :exc:`OverflowError`
|
||||||
|
when using :meth:`_ssl._SSLSocket.write` and :meth:`_ssl._SSLSocket.read`
|
||||||
|
for a big value of the ``len`` parameter. Patch by Pablo Galindo
|
@ -2346,7 +2346,7 @@ _ssl__SSLSocket_write_impl(PySSLSocket *self, Py_buffer *b)
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
PySSL_BEGIN_ALLOW_THREADS
|
PySSL_BEGIN_ALLOW_THREADS
|
||||||
retval = SSL_write_ex(self->ssl, b->buf, (int)b->len, &count);
|
retval = SSL_write_ex(self->ssl, b->buf, (size_t)b->len, &count);
|
||||||
err = _PySSL_errno(retval == 0, self->ssl, retval);
|
err = _PySSL_errno(retval == 0, self->ssl, retval);
|
||||||
PySSL_END_ALLOW_THREADS
|
PySSL_END_ALLOW_THREADS
|
||||||
self->err = err;
|
self->err = err;
|
||||||
@ -2418,7 +2418,7 @@ _ssl__SSLSocket_pending_impl(PySSLSocket *self)
|
|||||||
|
|
||||||
/*[clinic input]
|
/*[clinic input]
|
||||||
_ssl._SSLSocket.read
|
_ssl._SSLSocket.read
|
||||||
size as len: int
|
size as len: Py_ssize_t
|
||||||
[
|
[
|
||||||
buffer: Py_buffer(accept={rwbuffer})
|
buffer: Py_buffer(accept={rwbuffer})
|
||||||
]
|
]
|
||||||
@ -2428,9 +2428,9 @@ Read up to size bytes from the SSL socket.
|
|||||||
[clinic start generated code]*/
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
_ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1,
|
_ssl__SSLSocket_read_impl(PySSLSocket *self, Py_ssize_t len,
|
||||||
Py_buffer *buffer)
|
int group_right_1, Py_buffer *buffer)
|
||||||
/*[clinic end generated code: output=00097776cec2a0af input=ff157eb918d0905b]*/
|
/*[clinic end generated code: output=49b16e6406023734 input=ec48bf622be1c4a1]*/
|
||||||
{
|
{
|
||||||
PyObject *dest = NULL;
|
PyObject *dest = NULL;
|
||||||
char *mem;
|
char *mem;
|
||||||
@ -2498,7 +2498,7 @@ _ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1,
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
PySSL_BEGIN_ALLOW_THREADS
|
PySSL_BEGIN_ALLOW_THREADS
|
||||||
retval = SSL_read_ex(self->ssl, mem, len, &count);
|
retval = SSL_read_ex(self->ssl, mem, (size_t)len, &count);
|
||||||
err = _PySSL_errno(retval == 0, self->ssl, retval);
|
err = _PySSL_errno(retval == 0, self->ssl, retval);
|
||||||
PySSL_END_ALLOW_THREADS
|
PySSL_END_ALLOW_THREADS
|
||||||
self->err = err;
|
self->err = err;
|
||||||
|
12
Modules/clinic/_ssl.c.h
generated
12
Modules/clinic/_ssl.c.h
generated
@ -271,25 +271,25 @@ PyDoc_STRVAR(_ssl__SSLSocket_read__doc__,
|
|||||||
{"read", (PyCFunction)_ssl__SSLSocket_read, METH_VARARGS, _ssl__SSLSocket_read__doc__},
|
{"read", (PyCFunction)_ssl__SSLSocket_read, METH_VARARGS, _ssl__SSLSocket_read__doc__},
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
_ssl__SSLSocket_read_impl(PySSLSocket *self, int len, int group_right_1,
|
_ssl__SSLSocket_read_impl(PySSLSocket *self, Py_ssize_t len,
|
||||||
Py_buffer *buffer);
|
int group_right_1, Py_buffer *buffer);
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
_ssl__SSLSocket_read(PySSLSocket *self, PyObject *args)
|
_ssl__SSLSocket_read(PySSLSocket *self, PyObject *args)
|
||||||
{
|
{
|
||||||
PyObject *return_value = NULL;
|
PyObject *return_value = NULL;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
int group_right_1 = 0;
|
int group_right_1 = 0;
|
||||||
Py_buffer buffer = {NULL, NULL};
|
Py_buffer buffer = {NULL, NULL};
|
||||||
|
|
||||||
switch (PyTuple_GET_SIZE(args)) {
|
switch (PyTuple_GET_SIZE(args)) {
|
||||||
case 1:
|
case 1:
|
||||||
if (!PyArg_ParseTuple(args, "i:read", &len)) {
|
if (!PyArg_ParseTuple(args, "n:read", &len)) {
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (!PyArg_ParseTuple(args, "iw*:read", &len, &buffer)) {
|
if (!PyArg_ParseTuple(args, "nw*:read", &len, &buffer)) {
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
group_right_1 = 1;
|
group_right_1 = 1;
|
||||||
@ -1358,4 +1358,4 @@ exit:
|
|||||||
#ifndef _SSL_ENUM_CRLS_METHODDEF
|
#ifndef _SSL_ENUM_CRLS_METHODDEF
|
||||||
#define _SSL_ENUM_CRLS_METHODDEF
|
#define _SSL_ENUM_CRLS_METHODDEF
|
||||||
#endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */
|
#endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */
|
||||||
/*[clinic end generated code: output=3b6f4471fb187d85 input=a9049054013a1b77]*/
|
/*[clinic end generated code: output=5a7d7bf5cf8ee092 input=a9049054013a1b77]*/
|
||||||
|
Loading…
Reference in New Issue
Block a user