https://github.com/python/cpython/commit/7168e98c80d28ab71f3927c6a60bf7154691f965
commit: 7168e98c80d28ab71f3927c6a60bf7154691f965
branch: main
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2025-09-13T19:27:04+02:00
summary:
gh-129813, PEP 782: Use PyBytesWriter in lzma and zlib (#138832)
Replace PyBytes_FromStringAndSize(NULL, size) with the new public
PyBytesWriter API.
files:
M Modules/_lzmamodule.c
M Modules/zlibmodule.c
diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c
index 9a49c8e539bf5b..bac49b1268cc56 100644
--- a/Modules/_lzmamodule.c
+++ b/Modules/_lzmamodule.c
@@ -1442,7 +1442,7 @@ _lzma__encode_filter_properties_impl(PyObject *module,
lzma_filter filter)
{
lzma_ret lzret;
uint32_t encoded_size;
- PyObject *result = NULL;
+ PyBytesWriter *writer = NULL;
_lzma_state *state = get_lzma_state(module);
assert(state != NULL);
@@ -1450,20 +1450,20 @@ _lzma__encode_filter_properties_impl(PyObject *module,
lzma_filter filter)
if (catch_lzma_error(state, lzret))
goto error;
- result = PyBytes_FromStringAndSize(NULL, encoded_size);
- if (result == NULL)
+ writer = PyBytesWriter_Create(encoded_size);
+ if (writer == NULL) {
goto error;
+ }
- lzret = lzma_properties_encode(
- &filter, (uint8_t *)PyBytes_AS_STRING(result));
+ lzret = lzma_properties_encode(&filter, PyBytesWriter_GetData(writer));
if (catch_lzma_error(state, lzret)) {
goto error;
}
- return result;
+ return PyBytesWriter_Finish(writer);
error:
- Py_XDECREF(result);
+ PyBytesWriter_Discard(writer);
return NULL;
}
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c
index a31a3a00a0a32f..f1312e687da71c 100644
--- a/Modules/zlibmodule.c
+++ b/Modules/zlibmodule.c
@@ -833,22 +833,24 @@ save_unconsumed_input(compobject *self, Py_buffer *data,
int err)
input data in self->unused_data. */
if (self->zst.avail_in > 0) {
Py_ssize_t old_size = PyBytes_GET_SIZE(self->unused_data);
- Py_ssize_t new_size, left_size;
- PyObject *new_data;
+ Py_ssize_t left_size;
left_size = (Byte *)data->buf + data->len - self->zst.next_in;
if (left_size > (PY_SSIZE_T_MAX - old_size)) {
PyErr_NoMemory();
return -1;
}
- new_size = old_size + left_size;
- new_data = PyBytes_FromStringAndSize(NULL, new_size);
- if (new_data == NULL)
+ PyBytesWriter *writer = PyBytesWriter_Create(old_size + left_size);
+ if (writer == NULL) {
return -1;
- memcpy(PyBytes_AS_STRING(new_data),
- PyBytes_AS_STRING(self->unused_data), old_size);
- memcpy(PyBytes_AS_STRING(new_data) + old_size,
- self->zst.next_in, left_size);
- Py_SETREF(self->unused_data, new_data);
+ }
+ char *new_data = PyBytesWriter_GetData(writer);
+ memcpy(new_data, PyBytes_AS_STRING(self->unused_data), old_size);
+ memcpy(new_data + old_size, self->zst.next_in, left_size);
+ PyObject *new_unused_data = PyBytesWriter_Finish(writer);
+ if (new_unused_data == NULL) {
+ return -1;
+ }
+ Py_SETREF(self->unused_data, new_unused_data);
self->zst.avail_in = 0;
}
}
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]