https://github.com/python/cpython/commit/c72ffe71f1f1ba521bd716d83f76242bdf94ea18
commit: c72ffe71f1f1ba521bd716d83f76242bdf94ea18
branch: main
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2025-09-17T17:58:32+02:00
summary:
gh-129813, PEP 782: Set invalid bytes in PyBytesWriter (#139054)
Initialize the buffer with 0xFF byte pattern when creating a writer
object, but also when resizing/growing the writer.
files:
M Objects/bytesobject.c
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index 0fd7983d51e0e7..cd314fdd5b1e14 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -3805,12 +3805,12 @@ byteswriter_resize(PyBytesWriter *writer, Py_ssize_t
size, int overallocate)
{
assert(size >= 0);
- if (size <= byteswriter_allocated(writer)) {
+ Py_ssize_t old_allocated = byteswriter_allocated(writer);
+ if (size <= old_allocated) {
return 0;
}
- overallocate &= writer->overallocate;
- if (overallocate) {
+ if (overallocate & writer->overallocate) {
if (size <= (PY_SSIZE_T_MAX - size / OVERALLOCATE_FACTOR)) {
size += size / OVERALLOCATE_FACTOR;
}
@@ -3849,6 +3849,15 @@ byteswriter_resize(PyBytesWriter *writer, Py_ssize_t
size, int overallocate)
writer->small_buffer,
sizeof(writer->small_buffer));
}
+
+#ifdef Py_DEBUG
+ Py_ssize_t allocated = byteswriter_allocated(writer);
+ if (overallocate && allocated > old_allocated) {
+ memset(byteswriter_data(writer) + old_allocated, 0xff,
+ allocated - old_allocated);
+ }
+#endif
+
return 0;
}
@@ -3869,9 +3878,6 @@ byteswriter_create(Py_ssize_t size, int use_bytearray)
return NULL;
}
}
-#ifdef Py_DEBUG
- memset(writer->small_buffer, 0xff, sizeof(writer->small_buffer));
-#endif
writer->obj = NULL;
writer->size = 0;
writer->use_bytearray = use_bytearray;
@@ -3884,6 +3890,9 @@ byteswriter_create(Py_ssize_t size, int use_bytearray)
}
writer->size = size;
}
+#ifdef Py_DEBUG
+ memset(byteswriter_data(writer), 0xff, byteswriter_allocated(writer));
+#endif
return writer;
}
_______________________________________________
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]