Skip to content

Commit e7f82f8

Browse files
committed
fix check of usb_hid.Device out_report_length
1 parent 6e71f60 commit e7f82f8

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

locale/circuitpython.pot

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ msgstr ""
8787
msgid "%q list must be a list"
8888
msgstr ""
8989

90+
#: shared-bindings/usb_hid/Device.c
91+
msgid "%q must be 0-255"
92+
msgstr ""
93+
9094
#: shared-bindings/usb_hid/Device.c
9195
msgid "%q must be 1-255"
9296
msgstr ""
@@ -104,7 +108,7 @@ msgid "%q must be >= 1"
104108
msgstr ""
105109

106110
#: shared-bindings/usb_hid/Device.c
107-
msgid "%q must be None or 1-255"
111+
msgid "%q must be None or between 1 and len(report_descriptor)-1"
108112
msgstr ""
109113

110114
#: shared-module/vectorio/Polygon.c

shared-bindings/usb_hid/Device.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,16 @@ STATIC mp_obj_t usb_hid_device_make_new(const mp_obj_type_t *type, size_t n_args
6969
{ MP_QSTR_usage_page, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT },
7070
{ MP_QSTR_usage, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT },
7171
{ 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 } },
7373
{ MP_QSTR_report_id_index, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = mp_const_none } },
7474
};
7575

7676
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
7777
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
7878

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);
8282

8383
const mp_int_t usage_page_arg = args[ARG_usage_page].u_int;
8484
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
9999
const uint8_t in_report_length = in_report_length_arg;
100100

101101
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);
104104
}
105105
const uint8_t out_report_length = out_report_length_arg;
106106

107107
const mp_obj_t report_id_index_arg = args[ARG_report_id_index].u_obj;
108108
uint8_t report_id_index = 0;
109109
if (report_id_index_arg != mp_const_none) {
110110
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);
113114
}
114115
report_id_index = report_id_index_int;
115116
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy