Mercurial > cpython-lru_cache-weakref
diff Objects/bufferobject.c @ 33560:97cb9eea212e legacy-trunk
Ensure negative offsets cannot be passed to buffer(). When composing
buffers, compute the new buffer size based on the old buffer size.
Fixes SF bug #1034242.
| author | Neil Schemenauer <nascheme@enme.ucalgary.ca> |
|---|---|
| date | Fri, 24 Sep 2004 19:17:26 +0000 |
| parents | be8cff4a1eca |
| children | 97c97194e64b |
line wrap: on
line diff
--- a/Objects/bufferobject.c Fri Sep 24 15:41:27 2004 +0000 +++ b/Objects/bufferobject.c Fri Sep 24 19:17:26 2004 +0000 @@ -90,10 +90,23 @@ static PyObject * buffer_from_object(PyObject *base, int size, int offset, int readonly) { + if (offset < 0) { + PyErr_SetString(PyExc_ValueError, + "offset must be zero or positive"); + return NULL; + } if ( PyBuffer_Check(base) && (((PyBufferObject *)base)->b_base) ) { /* another buffer, refer to the base object */ - offset += ((PyBufferObject *)base)->b_offset; - base = ((PyBufferObject *)base)->b_base; + PyBufferObject *b = (PyBufferObject *)base; + if (b->b_size != Py_END_OF_BUFFER) { + int base_size = b->b_size - offset; + if (base_size < 0) + base_size = 0; + if (size == Py_END_OF_BUFFER || size > base_size) + size = base_size; + } + offset += b->b_offset; + base = b->b_base; } return buffer_from_memory(base, size, offset, NULL, readonly); }
