mirror of
https://github.com/micropython/micropython.git
synced 2026-01-08 13:10:21 +01:00
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>
This commit is contained in:
committed by
Damien George
parent
d6bc34a13a
commit
5c4153ea37
27
tests/basics/memoryview_slice_size.py
Normal file
27
tests/basics/memoryview_slice_size.py
Normal file
@@ -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")
|
||||
2
tests/basics/memoryview_slice_size.py.exp
Normal file
2
tests/basics/memoryview_slice_size.py.exp
Normal file
@@ -0,0 +1,2 @@
|
||||
<memoryview>
|
||||
OverflowError
|
||||
Reference in New Issue
Block a user