5c4153ea37
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>
28 lines
594 B
Python
28 lines
594 B
Python
# 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")
|