diff options
| author | Andrew Leech <andrew.leech@planetinnovation.com.au> | 2022-08-07 16:24:37 +1000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2023-01-20 16:31:37 +1100 |
| commit | 5c4153ea379550bf595bf0bfa0e3711afea17aa0 (patch) | |
| tree | 75d7ab1912e8a3a24af38ea20a88d260eecb4dbf /tests | |
| parent | d6bc34a13aa734d8b32e5768c021377ac4815029 (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.py | 27 | ||||
| -rw-r--r-- | tests/basics/memoryview_slice_size.py.exp | 2 |
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 |
