https://github.com/python/cpython/commit/a0e77f20cbd479c128cb425d5dcadd1584c0d571
commit: a0e77f20cbd479c128cb425d5dcadd1584c0d571
branch: main
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2026-08-14T13:08:40+02:00
summary:

gh-155742: Use PyBytesWriter in _zstd.train_dict() (#155745)

Replace soft deprecated PyBytes_FromStringAndSize() with
PyBytesWriter.

files:
M Modules/_zstd/_zstdmodule.c

diff --git a/Modules/_zstd/_zstdmodule.c b/Modules/_zstd/_zstdmodule.c
index 94246dd93b17de1..c9ed1ff22bdbd7f 100644
--- a/Modules/_zstd/_zstdmodule.c
+++ b/Modules/_zstd/_zstdmodule.c
@@ -274,7 +274,7 @@ _zstd_train_dict_impl(PyObject *module, PyBytesObject 
*samples_bytes,
                       PyObject *samples_sizes, Py_ssize_t dict_size)
 /*[clinic end generated code: output=8e87fe43935e8f77 input=d20dedb21c72cb62]*/
 {
-    PyObject *dst_dict_bytes = NULL;
+    PyBytesWriter *dst_dict_bytes = NULL;
     size_t *chunk_sizes = NULL;
     Py_ssize_t chunks_number;
     size_t zstd_ret;
@@ -294,13 +294,13 @@ _zstd_train_dict_impl(PyObject *module, PyBytesObject 
*samples_bytes,
     }
 
     /* Allocate dict buffer */
-    dst_dict_bytes = PyBytes_FromStringAndSize(NULL, dict_size);
+    dst_dict_bytes = PyBytesWriter_Create(dict_size);
     if (dst_dict_bytes == NULL) {
         goto error;
     }
 
     /* Train the dictionary */
-    char *dst_dict_buffer = PyBytes_AS_STRING(dst_dict_bytes);
+    char *dst_dict_buffer = PyBytesWriter_GetData(dst_dict_bytes);
     const char *samples_buffer = PyBytes_AS_STRING(samples_bytes);
     Py_BEGIN_ALLOW_THREADS
     zstd_ret = ZDICT_trainFromBuffer(dst_dict_buffer, dict_size,
@@ -315,19 +315,15 @@ _zstd_train_dict_impl(PyObject *module, PyBytesObject 
*samples_bytes,
         goto error;
     }
 
-    /* Resize dict_buffer */
-    if (_PyBytes_Resize(&dst_dict_bytes, zstd_ret) < 0) {
-        goto error;
-    }
+    PyMem_Free(chunk_sizes);
 
-    goto success;
+    /* Resize dict_buffer */
+    return PyBytesWriter_FinishWithSize(dst_dict_bytes, zstd_ret);
 
 error:
-    Py_CLEAR(dst_dict_bytes);
-
-success:
+    PyBytesWriter_Discard(dst_dict_bytes);
     PyMem_Free(chunk_sizes);
-    return dst_dict_bytes;
+    return NULL;
 }
 
 /*[clinic input]

_______________________________________________
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]

Reply via email to