summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--msgpack/fallback.py2
-rw-r--r--test/test_memoryview.py8
2 files changed, 9 insertions, 1 deletions
diff --git a/msgpack/fallback.py b/msgpack/fallback.py
index f560c7b..e8cebc1 100644
--- a/msgpack/fallback.py
+++ b/msgpack/fallback.py
@@ -814,7 +814,7 @@ class Packer(object):
self._pack_raw_header(n)
return self._buffer.write(obj)
if check(obj, memoryview):
- n = len(obj) * obj.itemsize
+ n = obj.nbytes
if n >= 2**32:
raise ValueError("Memoryview is too large")
self._pack_bin_header(n)
diff --git a/test/test_memoryview.py b/test/test_memoryview.py
index 84941db..a0939a6 100644
--- a/test/test_memoryview.py
+++ b/test/test_memoryview.py
@@ -96,3 +96,11 @@ def test_bin32_from_byte():
def test_bin32_from_float():
_runtest("f", 2**16, b"\xc6", b"\x00\x01\x00\x00", True)
+
+
+def test_multidim_memoryview():
+ # See https://github.com/msgpack/msgpack-python/issues/526
+ view = memoryview(b"\00" * 6)
+ data = view.cast(view.format, (3, 2))
+ packed = packb(data)
+ assert packed == b'\xc4\x06\x00\x00\x00\x00\x00\x00'