py/objslice: Validate that the argument to indices() is an integer.

Otherwise passing in a non-integer can lead to an invalid memory access.

Thanks to Junwha Hong and Wonil Jang @S2Lab, UNIST for finding the issue.

Fixes issue #13007.

Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
Damien George 2023-11-21 22:28:57 +11:00
parent fce8d9fd55
commit f397a3ec31
2 changed files with 6 additions and 1 deletions

View File

@ -54,7 +54,7 @@ STATIC mp_obj_t slice_unary_op(mp_unary_op_t op, mp_obj_t o_in) {
#if MICROPY_PY_BUILTINS_SLICE_INDICES
STATIC mp_obj_t slice_indices(mp_obj_t self_in, mp_obj_t length_obj) {
mp_int_t length = mp_obj_int_get_checked(length_obj);
mp_int_t length = mp_obj_get_int(length_obj);
mp_bound_slice_t bound_indices;
mp_obj_slice_indices(self_in, length, &bound_indices);

View File

@ -25,3 +25,8 @@ print(A()[2:7:2].indices(5))
print(A()[2:7:-2].indices(5))
print(A()[7:2:2].indices(5))
print(A()[7:2:-2].indices(5))
try:
print(A()[::].indices(None))
except TypeError:
print("TypeError")