From: Raymond Hettinger Date: Tue, 25 Jun 2002 00:25:30 +0000 (+0000) Subject: Fix SF bug 546434 -- buffer slice type inconsistent. X-Git-Tag: v2.3c1~5232 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5a04aec384c6d8346ee31396aad08b75421efae5;p=python Fix SF bug 546434 -- buffer slice type inconsistent. --- diff --git a/Misc/NEWS b/Misc/NEWS index 99c3547843..9fb542d900 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -6,6 +6,11 @@ Type/class unification and new-style classes Core and builtins +- Slices and repetitions of buffer objects now consistently return + a string. Formerly, strings would be returned most of the time, + but a buffer object would be returned when the repetition count + was one or when the slice range was all inclusive. + - The __slots__ variable can now mention "private" names, and the right thing will happen (e.g. __slots__ = ["__foo"]). diff --git a/Objects/bufferobject.c b/Objects/bufferobject.c index 031c000b8e..690f56b702 100644 --- a/Objects/bufferobject.c +++ b/Objects/bufferobject.c @@ -296,13 +296,6 @@ buffer_concat(PyBufferObject *self, PyObject *other) if ( (count = (*pb->bf_getreadbuffer)(other, 0, &p2)) < 0 ) return NULL; - /* optimize special case */ - if ( count == 0 ) - { - Py_INCREF(self); - return (PyObject *)self; - } - ob = PyString_FromStringAndSize(NULL, self->b_size + count); p1 = PyString_AS_STRING(ob); memcpy(p1, self->b_ptr, self->b_size); @@ -361,12 +354,6 @@ buffer_slice(PyBufferObject *self, int left, int right) right = 0; if ( right > self->b_size ) right = self->b_size; - if ( left == 0 && right == self->b_size ) - { - /* same as self */ - Py_INCREF(self); - return (PyObject *)self; - } if ( right < left ) right = left; return PyString_FromStringAndSize((char *)self->b_ptr + left,