summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Mussared <jim.mussared@gmail.com>2020-11-25 09:28:41 +1100
committerDamien George <damien@micropython.org>2020-12-02 14:35:17 +1100
commitf2a9a0ac413cc337ccd78bbb26cd67cee7b1e210 (patch)
tree2a24bc163d020299a3b8211e9dbbfa487a4579a0
parentb505971069333a373d9f0c12138b64dab83fed72 (diff)
extmod/nimble: Fail read if the characteristic is too big.
Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
-rw-r--r--extmod/nimble/modbluetooth_nimble.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/extmod/nimble/modbluetooth_nimble.c b/extmod/nimble/modbluetooth_nimble.c
index bbff26b53..e4a048e3d 100644
--- a/extmod/nimble/modbluetooth_nimble.c
+++ b/extmod/nimble/modbluetooth_nimble.c
@@ -608,7 +608,9 @@ static int characteristic_access_cb(uint16_t conn_handle, uint16_t value_handle,
return BLE_ATT_ERR_ATTR_NOT_FOUND;
}
- os_mbuf_append(ctxt->om, entry->data, entry->data_len);
+ if (os_mbuf_append(ctxt->om, entry->data, entry->data_len)) {
+ return BLE_ATT_ERR_INSUFFICIENT_RES;
+ }
return 0;
case BLE_GATT_ACCESS_OP_WRITE_CHR:
@@ -625,6 +627,8 @@ static int characteristic_access_cb(uint16_t conn_handle, uint16_t value_handle,
entry->data_len = MIN(entry->data_alloc, OS_MBUF_PKTLEN(ctxt->om) + offset);
os_mbuf_copydata(ctxt->om, 0, entry->data_len - offset, entry->data + offset);
+ // TODO: Consider failing with BLE_ATT_ERR_INSUFFICIENT_RES if the buffer is full.
+
mp_bluetooth_gatts_on_write(conn_handle, value_handle);
return 0;