summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAndrew Leech <andrew.leech@planetinnovation.com.au>2022-08-07 16:24:37 +1000
committerDamien George <damien@micropython.org>2023-01-20 16:31:37 +1100
commit5c4153ea379550bf595bf0bfa0e3711afea17aa0 (patch)
tree75d7ab1912e8a3a24af38ea20a88d260eecb4dbf /tests
parentd6bc34a13aa734d8b32e5768c021377ac4815029 (diff)
py/objarray: Raise error on out-of-bound memoryview slice start.
32-bit platforms only support a slice offset start of 24 bit max due to the limited size of the mp_obj_array_t.free member. Similarly on 64-bit platforms the limit is 56 bits. This commit adds an OverflowError if the user attempts to slice a memoryview beyond this limit. Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/basics/memoryview_slice_size.py27
-rw-r--r--tests/basics/memoryview_slice_size.py.exp2
2 files changed, 29 insertions, 0 deletions
diff --git a/tests/basics/memoryview_slice_size.py b/tests/basics/memoryview_slice_size.py
new file mode 100644
index 000000000..c56514d21
--- /dev/null
+++ b/tests/basics/memoryview_slice_size.py
@@ -0,0 +1,27 @@
+# test memoryview slicing beyond the limit of what memoryview can internally index
+
+try:
+ from sys import maxsize
+ from uctypes import bytearray_at
+
+ memoryview
+except:
+ print("SKIP")
+ raise SystemExit
+
+if maxsize <= 0xFFFF_FFFF:
+ slice_max = 0xFF_FFFF
+else:
+ slice_max = 0xFF_FFFF_FFFF_FFFF
+
+buf = bytearray_at(0, slice_max + 2)
+mv = memoryview(buf)
+
+# this should work
+print(mv[slice_max : slice_max + 1])
+
+# this should overflow the internal index for memoryview slicing
+try:
+ print(mv[slice_max + 1 : slice_max + 2])
+except OverflowError:
+ print("OverflowError")
diff --git a/tests/basics/memoryview_slice_size.py.exp b/tests/basics/memoryview_slice_size.py.exp
new file mode 100644
index 000000000..34baadd35
--- /dev/null
+++ b/tests/basics/memoryview_slice_size.py.exp
@@ -0,0 +1,2 @@
+<memoryview>
+OverflowError