@@ -69,16 +69,16 @@ STATIC mp_obj_t usb_hid_device_make_new(const mp_obj_type_t *type, size_t n_args
69
69
{ MP_QSTR_usage_page , MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT },
70
70
{ MP_QSTR_usage , MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT },
71
71
{ MP_QSTR_in_report_length , MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT },
72
- { MP_QSTR_out_report_length , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_int = 0 } },
72
+ { MP_QSTR_out_report_length , MP_ARG_KW_ONLY | MP_ARG_INT , {.u_int = 0 } },
73
73
{ MP_QSTR_report_id_index , MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ , {.u_obj = mp_const_none } },
74
74
};
75
75
76
76
mp_arg_val_t args [MP_ARRAY_SIZE (allowed_args )];
77
77
mp_arg_parse_all (n_args , pos_args , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , args );
78
78
79
- mp_buffer_info_t bufinfo ;
80
- mp_get_buffer_raise (args [ARG_report_descriptor ].u_obj , & bufinfo , MP_BUFFER_READ );
81
- mp_obj_t descriptor = mp_obj_new_bytearray (bufinfo .len , bufinfo .buf );
79
+ mp_buffer_info_t descriptor_bufinfo ;
80
+ mp_get_buffer_raise (args [ARG_report_descriptor ].u_obj , & descriptor_bufinfo , MP_BUFFER_READ );
81
+ mp_obj_t descriptor = mp_obj_new_bytearray (descriptor_bufinfo .len , descriptor_bufinfo .buf );
82
82
83
83
const mp_int_t usage_page_arg = args [ARG_usage_page ].u_int ;
84
84
if (usage_page_arg <= 0 || usage_page_arg > 255 ) {
@@ -99,17 +99,18 @@ STATIC mp_obj_t usb_hid_device_make_new(const mp_obj_type_t *type, size_t n_args
99
99
const uint8_t in_report_length = in_report_length_arg ;
100
100
101
101
const mp_int_t out_report_length_arg = args [ARG_out_report_length ].u_int ;
102
- if (out_report_length_arg <= 0 || out_report_length_arg > 255 ) {
103
- mp_raise_ValueError_varg (translate ("%q must be 1 -255" ), MP_QSTR_out_report_length );
102
+ if (out_report_length_arg < 0 || out_report_length_arg > 255 ) {
103
+ mp_raise_ValueError_varg (translate ("%q must be 0 -255" ), MP_QSTR_out_report_length );
104
104
}
105
105
const uint8_t out_report_length = out_report_length_arg ;
106
106
107
107
const mp_obj_t report_id_index_arg = args [ARG_report_id_index ].u_obj ;
108
108
uint8_t report_id_index = 0 ;
109
109
if (report_id_index_arg != mp_const_none ) {
110
110
const mp_int_t report_id_index_int = mp_obj_int_get_checked (report_id_index_arg );
111
- if (report_id_index_int <= 0 || report_id_index_int > 255 ) {
112
- mp_raise_ValueError_varg (translate ("%q must be None or 1-255" ), MP_QSTR_report_id_index );
111
+ if (report_id_index_int <= 0 || (uint32_t )report_id_index_int >= descriptor_bufinfo .len ) {
112
+ mp_raise_ValueError_varg (translate ("%q must be None or between 1 and len(report_descriptor)-1" ),
113
+ MP_QSTR_report_id_index );
113
114
}
114
115
report_id_index = report_id_index_int ;
115
116
}
0 commit comments