mirror of
https://github.com/python/cpython.git
synced 2026-01-06 15:32:22 +00:00
gh-129813, PEP 782: Use PyBytesWriter in ssl.MemoryBIO (#139113)
Replace PyBytes_FromStringAndSize(NULL, size) and _PyBytes_Resize() with the new public PyBytesWriter API.
This commit is contained in:
parent
89ff88be89
commit
d6a6fe2a5b
1 changed files with 11 additions and 12 deletions
|
|
@ -5848,30 +5848,29 @@ _ssl_MemoryBIO_read_impl(PySSLMemoryBIO *self, int len)
|
|||
/*[clinic end generated code: output=a657aa1e79cd01b3 input=21046f2d7dac3a90]*/
|
||||
{
|
||||
int avail, nbytes;
|
||||
PyObject *result;
|
||||
|
||||
avail = (int)Py_MIN(BIO_ctrl_pending(self->bio), INT_MAX);
|
||||
if ((len < 0) || (len > avail))
|
||||
len = avail;
|
||||
|
||||
result = PyBytes_FromStringAndSize(NULL, len);
|
||||
if ((result == NULL) || (len == 0))
|
||||
return result;
|
||||
if (len == 0) {
|
||||
return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
|
||||
}
|
||||
|
||||
nbytes = BIO_read(self->bio, PyBytes_AS_STRING(result), len);
|
||||
PyBytesWriter *writer = PyBytesWriter_Create(len);
|
||||
if (writer == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nbytes = BIO_read(self->bio, PyBytesWriter_GetData(writer), len);
|
||||
if (nbytes < 0) {
|
||||
_sslmodulestate *state = get_state_mbio(self);
|
||||
Py_DECREF(result);
|
||||
PyBytesWriter_Discard(writer);
|
||||
_setSSLError(state, NULL, 0, __FILE__, __LINE__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* There should never be any short reads but check anyway. */
|
||||
if (nbytes < len) {
|
||||
_PyBytes_Resize(&result, nbytes);
|
||||
}
|
||||
|
||||
return result;
|
||||
return PyBytesWriter_FinishWithSize(writer, nbytes);
|
||||
}
|
||||
|
||||
/*[clinic input]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue