diff options
author | Jim Mussared <jim.mussared@gmail.com> | 2020-11-25 09:28:41 +1100 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2020-12-02 14:35:17 +1100 |
commit | f2a9a0ac413cc337ccd78bbb26cd67cee7b1e210 (patch) | |
tree | 2a24bc163d020299a3b8211e9dbbfa487a4579a0 | |
parent | b505971069333a373d9f0c12138b64dab83fed72 (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.c | 6 |
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; |