Skip to content

Commit 5f8ec0a

Browse files
committed
Validate type of filter tuple items.
1 parent 941e122 commit 5f8ec0a

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

shared-module/audiofilters/Filter.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -131,14 +131,18 @@ mp_obj_t common_hal_audiofilters_filter_get_filter(audiofilters_filter_obj_t *se
131131
void common_hal_audiofilters_filter_set_filter(audiofilters_filter_obj_t *self, mp_obj_t arg) {
132132
if (arg == mp_const_none || mp_obj_is_type(arg, (const mp_obj_type_t *)&synthio_biquad_type_obj)) {
133133
self->filter = arg;
134-
} else if (mp_obj_is_tuple_compatible(arg)) {
135-
mp_obj_tuple_t *tuple_obj = (mp_obj_tuple_t *)MP_OBJ_TO_PTR(arg);
136-
self->filter = mp_obj_new_tuple(tuple_obj->len, tuple_obj->items);
137-
} else if (mp_obj_is_type(arg, &mp_type_list)) {
138-
size_t list_len;
139-
mp_obj_t *list_items;
140-
mp_obj_list_get(arg, &list_len, &list_items);
141-
self->filter = mp_obj_new_tuple(list_len, list_items);
134+
} else if (mp_obj_is_tuple_compatible(arg) || mp_obj_is_type(arg, &mp_type_list)) {
135+
size_t tuple_len;
136+
mp_obj_t *tuple_items = NULL;
137+
138+
mp_obj_get_array(arg, &tuple_len, &tuple_items);
139+
140+
mp_obj_t *biquad_objects[tuple_len];
141+
for (size_t i = 0; i < tuple_len; i++) {
142+
biquad_objects[i] = mp_arg_validate_type_in(tuple_items[i], (const mp_obj_type_t *)&synthio_biquad_type_obj, MP_QSTR_filter);
143+
}
144+
145+
self->filter = mp_obj_new_tuple(tuple_len, (const mp_obj_t *)biquad_objects);
142146
} else {
143147
mp_raise_ValueError_varg(MP_ERROR_TEXT("%q must be a %q object, %q, or %q"), MP_QSTR_filter, MP_QSTR_Biquad, MP_QSTR_tuple, MP_QSTR_None);
144148
}

0 commit comments

Comments
 (0)