Skip to content

Commit 086832c

Browse files
authored
Merge pull request #258 from minrk/check-contiguous
check that buffers are contiguous
2 parents 5a8d7f8 + 8416398 commit 086832c

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

jupyter_client/session.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -717,13 +717,20 @@ def send(self, stream, msg_or_type, content=None, parent=None, ident=None,
717717
)
718718
return
719719
buffers = [] if buffers is None else buffers
720-
for buf in buffers:
721-
if not isinstance(buf, memoryview):
720+
for idx, buf in enumerate(buffers):
721+
if isinstance(buf, memoryview):
722+
view = buf
723+
else:
722724
try:
723725
# check to see if buf supports the buffer protocol.
724-
memoryview(buf)
726+
view = memoryview(buf)
725727
except TypeError:
726728
raise TypeError("Buffer objects must support the buffer protocol.")
729+
# memoryview.contiguous is new in 3.3,
730+
# just skip the check on Python 2
731+
if hasattr(view, 'contiguous') and not view.contiguous:
732+
# zmq requires memoryviews to be contiguous
733+
raise ValueError("Buffer %i (%r) is not contiguous" % (idx, buf))
727734

728735
if self.adapt_version:
729736
msg = adapt(msg, self.adapt_version)

jupyter_client/tests/test_session.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import hmac
77
import os
8+
import sys
89
import uuid
910
from datetime import datetime
1011

@@ -123,9 +124,15 @@ def test_send(self):
123124
self.assertEqual(new_msg['buffers'],[b'bar'])
124125

125126
# buffers must support the buffer protocol
126-
with self.assertRaises(TypeError) as cm:
127+
with self.assertRaises(TypeError):
127128
self.session.send(A, msg, ident=b'foo', buffers=[1])
128129

130+
# buffers must be contiguous
131+
buf = memoryview(os.urandom(16))
132+
if sys.version_info >= (3,3):
133+
with self.assertRaises(ValueError):
134+
self.session.send(A, msg, ident=b'foo', buffers=[buf[::2]])
135+
129136
A.close()
130137
B.close()
131138
ctx.term()

0 commit comments

Comments
 (0)