From: Serhiy Storchaka Date: Tue, 3 Feb 2015 12:57:49 +0000 (+0200) Subject: Issue #15381: Try to fix refcount bug. Empty and 1-byte buffers are always shared. X-Git-Tag: v3.5.0a1~36 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b9765eec5cbc149120acb50646256cffde94d74f;p=python Issue #15381: Try to fix refcount bug. Empty and 1-byte buffers are always shared. --- 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) {