summaryrefslogtreecommitdiff
path: root/Objects/bytesobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/bytesobject.c')
-rw-r--r--Objects/bytesobject.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index 4b312717cf..532051e242 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -4019,19 +4019,24 @@ _PyBytesWriter_Finish(_PyBytesWriter *writer, void *str)
_PyBytesWriter_CheckConsistency(writer, str);
pos = _PyBytesWriter_GetPos(writer, str);
- if (!writer->use_small_buffer) {
+ if (pos == 0) {
+ Py_CLEAR(writer->buffer);
+ /* Get the empty byte string singleton */
+ result = PyBytes_FromStringAndSize(NULL, 0);
+ }
+ else if (writer->use_small_buffer) {
+ result = PyBytes_FromStringAndSize(writer->small_buffer, pos);
+ }
+ else {
+ result = writer->buffer;
+ writer->buffer = NULL;
+
if (pos != writer->allocated) {
- if (_PyBytes_Resize(&writer->buffer, pos)) {
- assert(writer->buffer == NULL);
+ if (_PyBytes_Resize(&result, pos)) {
+ assert(result == NULL);
return NULL;
}
}
-
- result = writer->buffer;
- writer->buffer = NULL;
- }
- else {
- result = PyBytes_FromStringAndSize(writer->small_buffer, pos);
}
return result;
}