#2538: bytes objects can only provide read-only buffers

This commit is contained in:
Antoine Pitrou 2008-08-02 21:02:48 +00:00
parent 07431a302a
commit 2f89aa6785
4 changed files with 13 additions and 8 deletions

View file

@ -453,6 +453,11 @@ def test_ord(self):
class BytesTest(BaseBytesTest):
type2test = bytes
def test_buffer_is_readonly(self):
with open(sys.stdin.fileno(), "rb", buffering=0) as f:
self.assertRaises(TypeError, f.readinto, b"")
class ByteArrayTest(BaseBytesTest):
type2test = bytearray

View file

@ -1112,7 +1112,7 @@ def __init__(self, methodName='runTest'):
SocketConnectedTest.__init__(self, methodName=methodName)
def testRecvInto(self):
buf = b" "*1024
buf = bytearray(1024)
nbytes = self.cli_conn.recv_into(buf)
self.assertEqual(nbytes, len(MSG))
msg = buf[:len(MSG)]
@ -1123,7 +1123,7 @@ def _testRecvInto(self):
self.serv_conn.send(buf)
def testRecvFromInto(self):
buf = b" "*1024
buf = bytearray(1024)
nbytes, addr = self.cli_conn.recvfrom_into(buf)
self.assertEqual(nbytes, len(MSG))
msg = buf[:len(MSG)]

View file

@ -965,7 +965,7 @@ static int
string_buffer_getbuffer(PyBytesObject *self, Py_buffer *view, int flags)
{
return PyBuffer_FillInfo(view, (void *)self->ob_sval, Py_SIZE(self),
0, flags);
1, flags);
}
static PySequenceMethods string_as_sequence = {

View file

@ -56,7 +56,7 @@ PyMemoryView_FromObject(PyObject *base)
if (mview == NULL) return NULL;
mview->base = NULL;
if (PyObject_GetBuffer(base, &(mview->view), PyBUF_FULL) < 0) {
if (PyObject_GetBuffer(base, &(mview->view), PyBUF_FULL_RO) < 0) {
Py_DECREF(mview);
return NULL;
}
@ -204,9 +204,9 @@ _indirect_copy_nd(char *dest, Py_buffer *view, char fort)
a contiguous buffer if it is not. The view will point to
the shadow buffer which can be written to and then
will be copied back into the other buffer when the memory
view is de-allocated. While the shadow buffer is
being used, it will have an exclusive write lock on
the original buffer.
view is de-allocated. While the shadow buffer is
being used, it will have an exclusive write lock on
the original buffer.
*/
PyObject *
@ -528,7 +528,7 @@ memory_subscript(PyMemoryViewObject *self, PyObject *key)
/* Return a new memory-view object */
Py_buffer newview;
memset(&newview, 0, sizeof(newview));
/* XXX: This needs to be fixed so it
/* XXX: This needs to be fixed so it
actually returns a sub-view
*/
return PyMemoryView_FromMemory(&newview);