summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorInada Naoki <songofacandy@gmail.com>2023-01-18 19:13:44 +0900
committerGitHub <noreply@github.com>2023-01-18 19:13:44 +0900
commitb82d0b62f187552b8108602d7b0451ac362a29cc (patch)
tree96a036bdbf722df9df87c17c72cc87ae96f21454
parentc3995669f1f821596714240c2cd07943810f8658 (diff)
downloadmsgpack-python-b82d0b62f187552b8108602d7b0451ac362a29cc.tar.gz
fallback: Fix packing multidim memoryview (#527)
Fix #526
-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'