From b9765eec5cbc149120acb50646256cffde94d74f Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 3 Feb 2015 14:57:49 +0200 Subject: [PATCH] Issue #15381: Try to fix refcount bug. Empty and 1-byte buffers are always shared. --- Modules/_io/bytesio.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c index ca5156b84b..1638f943d0 100644 --- a/Modules/_io/bytesio.c +++ b/Modules/_io/bytesio.c @@ -38,7 +38,8 @@ typedef struct { return NULL; \ } -#define SHARED_BUF(self) (Py_REFCNT((self)->buf) > 1) +#define SHARED_BUF(self) (Py_REFCNT((self)->buf) > 1 || \ + PyBytes_GET_SIZE((self)->buf) <= 1) /* Internal routine to get a line from the buffer of a BytesIO @@ -308,6 +309,7 @@ read_bytes(bytesio *self, Py_ssize_t size) char *output; assert(self->buf != NULL); + assert(size <= self->string_size); if (size > 1 && self->pos == 0 && size == PyBytes_GET_SIZE(self->buf) && self->exports == 0) { -- 2.40.0