https://github.com/python/cpython/commit/06b7891f12b4b93dd78704cf3fbf520ae4685064
commit: 06b7891f12b4b93dd78704cf3fbf520ae4685064
branch: main
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2025-09-13T18:30:25+02:00
summary:
gh-129813, PEP 782: Use Py_GetConstant(Py_CONSTANT_EMPTY_BYTES) (#138830)
Replace PyBytes_FromStringAndSize(NULL, 0) with
Py_GetConstant(Py_CONSTANT_EMPTY_BYTES). Py_GetConstant() cannot
fail.
files:
M Modules/_bz2module.c
M Modules/_dbmmodule.c
M Modules/_lzmamodule.c
M Modules/zlibmodule.c
M Objects/bytesobject.c
M Objects/unicodeobject.c
diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c
index 914172684158a1..ea94f4321d74de 100644
--- a/Modules/_bz2module.c
+++ b/Modules/_bz2module.c
@@ -669,9 +669,7 @@ _bz2_BZ2Decompressor_impl(PyTypeObject *type)
self->bzs_avail_in_real = 0;
self->input_buffer = NULL;
self->input_buffer_size = 0;
- self->unused_data = PyBytes_FromStringAndSize(NULL, 0);
- if (self->unused_data == NULL)
- goto error;
+ self->unused_data = Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
bzerror = BZ2_bzDecompressInit(&self->bzs, 0, 0);
if (catch_bz2_error(bzerror))
diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c
index 17aca2f00a13c0..3fdcf22ffd56d0 100644
--- a/Modules/_dbmmodule.c
+++ b/Modules/_dbmmodule.c
@@ -450,10 +450,7 @@ _dbm_dbm_setdefault_impl(dbmobject *self, PyTypeObject
*cls, const char *key,
return PyBytes_FromStringAndSize(val.dptr, val.dsize);
}
if (default_value == NULL) {
- default_value = PyBytes_FromStringAndSize(NULL, 0);
- if (default_value == NULL) {
- return NULL;
- }
+ default_value = Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
val.dptr = NULL;
val.dsize = 0;
}
diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c
index 0b0b1bc765bbc9..9a49c8e539bf5b 100644
--- a/Modules/_lzmamodule.c
+++ b/Modules/_lzmamodule.c
@@ -1263,10 +1263,7 @@ _lzma_LZMADecompressor_impl(PyTypeObject *type, int
format,
self->needs_input = 1;
self->input_buffer = NULL;
self->input_buffer_size = 0;
- Py_XSETREF(self->unused_data, PyBytes_FromStringAndSize(NULL, 0));
- if (self->unused_data == NULL) {
- goto error;
- }
+ Py_XSETREF(self->unused_data, Py_GetConstant(Py_CONSTANT_EMPTY_BYTES));
switch (format) {
case FORMAT_AUTO:
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c
index 1ee14e31612860..a31a3a00a0a32f 100644
--- a/Modules/zlibmodule.c
+++ b/Modules/zlibmodule.c
@@ -1009,7 +1009,7 @@ zlib_Compress_flush_impl(compobject *self, PyTypeObject
*cls, int mode)
/* Flushing with Z_NO_FLUSH is a no-op, so there's no point in
doing any work at all; just return an empty string. */
if (mode == Z_NO_FLUSH) {
- return PyBytes_FromStringAndSize(NULL, 0);
+ return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
}
ENTER_ZLIB(self);
@@ -1764,11 +1764,7 @@ zlib__ZlibDecompressor_impl(PyTypeObject *type, int
wbits, PyObject *zdict)
self->zst.zfree = PyZlib_Free;
self->zst.next_in = NULL;
self->zst.avail_in = 0;
- self->unused_data = PyBytes_FromStringAndSize(NULL, 0);
- if (self->unused_data == NULL) {
- Py_CLEAR(self);
- return NULL;
- }
+ self->unused_data = Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
self->lock = PyThread_allocate_lock();
if (self->lock == NULL) {
Py_DECREF(self);
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index 728da6f1a24d6a..0bfdd727c76903 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -2785,7 +2785,7 @@ bytes_new_impl(PyTypeObject *type, PyObject *x, const
char *encoding,
"errors without a string argument");
return NULL;
}
- bytes = PyBytes_FromStringAndSize(NULL, 0);
+ bytes = Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
}
else if (encoding != NULL) {
/* Encode via the codec registry */
@@ -3680,7 +3680,7 @@ _PyBytesWriter_Finish(_PyBytesWriter *writer, void *str)
if (size == 0 && !writer->use_bytearray) {
Py_CLEAR(writer->buffer);
/* Get the empty byte string singleton */
- result = PyBytes_FromStringAndSize(NULL, 0);
+ result = Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
}
else if (writer->use_small_buffer) {
if (writer->use_bytearray) {
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 4c88e4c1fdca2e..c8d2c68615e13e 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -4913,7 +4913,7 @@ _PyUnicode_EncodeUTF7(PyObject *str,
len = PyUnicode_GET_LENGTH(str);
if (len == 0)
- return PyBytes_FromStringAndSize(NULL, 0);
+ return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
/* It might be possible to tighten this worst case */
if (len > PY_SSIZE_T_MAX / 8)
@@ -6914,7 +6914,7 @@ PyUnicode_AsUnicodeEscapeString(PyObject *unicode)
len = PyUnicode_GET_LENGTH(unicode);
if (len == 0) {
- return PyBytes_FromStringAndSize(NULL, 0);
+ return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
}
kind = PyUnicode_KIND(unicode);
@@ -7364,7 +7364,7 @@ unicode_encode_ucs1(PyObject *unicode,
/* allocate enough for a simple encoding without
replacements, if we need more, we'll resize */
if (size == 0)
- return PyBytes_FromStringAndSize(NULL, 0);
+ return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
_PyBytesWriter_Init(&writer);
str = _PyBytesWriter_Alloc(&writer, size);
@@ -8305,7 +8305,7 @@ encode_code_page(int code_page,
}
if (len == 0)
- return PyBytes_FromStringAndSize(NULL, 0);
+ return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
offset = 0;
do
_______________________________________________
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]