Skip to content

Commit 1c8e11b

Browse files
committed
bug in char get_value; raise NotImpl; better arg validation
1 parent d0ffdda commit 1c8e11b

File tree

5 files changed

+31
-6
lines changed

5 files changed

+31
-6
lines changed

devices/ble_hci/common-hal/_bleio/Adapter.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,8 @@ void common_hal_bleio_adapter_set_name(bleio_adapter_obj_t *self, const char* na
346346
// }
347347

348348
mp_obj_t common_hal_bleio_adapter_start_scan(bleio_adapter_obj_t *self, uint8_t* prefixes, size_t prefix_length, bool extended, mp_int_t buffer_size, mp_float_t timeout, mp_float_t interval, mp_float_t window, mp_int_t minimum_rssi, bool active) {
349+
// TODO
350+
mp_raise_NotImplementedError(NULL);
349351
check_enabled(self);
350352

351353
if (self->scan_results != NULL) {
@@ -392,6 +394,8 @@ mp_obj_t common_hal_bleio_adapter_start_scan(bleio_adapter_obj_t *self, uint8_t*
392394
}
393395

394396
void common_hal_bleio_adapter_stop_scan(bleio_adapter_obj_t *self) {
397+
// TODO
398+
mp_raise_NotImplementedError(NULL);
395399
check_enabled(self);
396400

397401
// If not already scanning, no problem.
@@ -430,6 +434,8 @@ void common_hal_bleio_adapter_stop_scan(bleio_adapter_obj_t *self) {
430434
// }
431435

432436
mp_obj_t common_hal_bleio_adapter_connect(bleio_adapter_obj_t *self, bleio_address_obj_t *address, mp_float_t timeout) {
437+
// TODO
438+
mp_raise_NotImplementedError(NULL);
433439

434440
check_enabled(self);
435441

@@ -742,6 +748,8 @@ mp_obj_t common_hal_bleio_adapter_get_connections(bleio_adapter_obj_t *self) {
742748
}
743749

744750
void common_hal_bleio_adapter_erase_bonding(bleio_adapter_obj_t *self) {
751+
// TODO
752+
mp_raise_NotImplementedError(NULL);
745753
check_enabled(self);
746754

747755
//FIX bonding_erase_storage();

devices/ble_hci/common-hal/_bleio/Characteristic.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,9 @@ size_t common_hal_bleio_characteristic_get_value(bleio_characteristic_obj_t *sel
9393
if (!mp_get_buffer(self->value, &bufinfo, MP_BUFFER_READ)) {
9494
return 0;
9595
}
96-
memcpy(buf, bufinfo.buf, MIN(len, bufinfo.len));
96+
const size_t actual_length = MIN(len, bufinfo.len);
97+
memcpy(buf, bufinfo.buf, actual_length);
98+
return actual_length;
9799
}
98100
}
99101

devices/ble_hci/common-hal/_bleio/Descriptor.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ size_t common_hal_bleio_descriptor_get_value(bleio_descriptor_obj_t *self, uint8
7474
if (!mp_get_buffer(self->value, &bufinfo, MP_BUFFER_READ)) {
7575
return 0;
7676
}
77-
size_t actual_length = MIN(len, bufinfo.len);
77+
const size_t actual_length = MIN(len, bufinfo.len);
7878
memcpy(buf, bufinfo.buf, actual_length);
7979
return actual_length;
8080
}

shared-bindings/_bleio/Characteristic.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,14 @@ STATIC mp_obj_t bleio_characteristic_add_to_service(size_t n_args, const mp_obj_
109109
const bleio_attribute_security_mode_t write_perm = args[ARG_write_perm].u_int;
110110
common_hal_bleio_attribute_security_mode_check_valid(write_perm);
111111

112-
const mp_int_t max_length = args[ARG_max_length].u_int;
112+
const mp_int_t max_length_int = args[ARG_max_length].u_int;
113+
if (max_length_int <= 0) {
114+
mp_raise_ValueError(translate("max_length must be > 0"));
115+
}
116+
const size_t max_length = (size_t) max_length_int;
113117
const bool fixed_length = args[ARG_fixed_length].u_bool;
114118
mp_obj_t initial_value = args[ARG_initial_value].u_obj;
115119

116-
// Length will be validated in common_hal.
117120
mp_buffer_info_t initial_value_bufinfo;
118121
if (initial_value == mp_const_none) {
119122
if (fixed_length && max_length > 0) {
@@ -122,7 +125,12 @@ STATIC mp_obj_t bleio_characteristic_add_to_service(size_t n_args, const mp_obj_
122125
initial_value = mp_const_empty_bytes;
123126
}
124127
}
128+
125129
mp_get_buffer_raise(initial_value, &initial_value_bufinfo, MP_BUFFER_READ);
130+
if (initial_value_bufinfo.len > max_length ||
131+
(fixed_length && initial_value_bufinfo.len != max_length)) {
132+
mp_raise_ValueError(translate("initial_value length is wrong"));
133+
}
126134

127135
bleio_characteristic_obj_t *characteristic = m_new_obj(bleio_characteristic_obj_t);
128136
characteristic->base.type = &bleio_characteristic_type;

shared-bindings/_bleio/Descriptor.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,14 @@ STATIC mp_obj_t bleio_descriptor_add_to_characteristic(size_t n_args, const mp_o
100100
const bleio_attribute_security_mode_t write_perm = args[ARG_write_perm].u_int;
101101
common_hal_bleio_attribute_security_mode_check_valid(write_perm);
102102

103-
const mp_int_t max_length = args[ARG_max_length].u_int;
103+
const mp_int_t max_length_int = args[ARG_max_length].u_int;
104+
if (max_length_int <= 0) {
105+
mp_raise_ValueError(translate("max_length must be > 0"));
106+
}
107+
const size_t max_length = (size_t) max_length_int;
104108
const bool fixed_length = args[ARG_fixed_length].u_bool;
105109
mp_obj_t initial_value = args[ARG_initial_value].u_obj;
106110

107-
// Length will be validated in common_hal.
108111
mp_buffer_info_t initial_value_bufinfo;
109112
if (initial_value == mp_const_none) {
110113
if (fixed_length && max_length > 0) {
@@ -114,6 +117,10 @@ STATIC mp_obj_t bleio_descriptor_add_to_characteristic(size_t n_args, const mp_o
114117
}
115118
}
116119
mp_get_buffer_raise(initial_value, &initial_value_bufinfo, MP_BUFFER_READ);
120+
if (initial_value_bufinfo.len > max_length ||
121+
(fixed_length && initial_value_bufinfo.len != max_length)) {
122+
mp_raise_ValueError(translate("initial_value length is wrong"));
123+
}
117124

118125
bleio_descriptor_obj_t *descriptor = m_new_obj(bleio_descriptor_obj_t);
119126
descriptor->base.type = &bleio_descriptor_type;

0 commit comments

Comments
 (0)