Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of nRF51822 by
Revision 448:1ed5645452e8, committed 2015-11-02
- Comitter:
- rgrover1
- Date:
- Mon Nov 02 09:05:09 2015 +0000
- Parent:
- 447:088f5738bf18
- Child:
- 449:fd09f590751b
- Commit message:
- Synchronized with git rev 4af5d03c
Author: Tim
Error check number of characteristics
Currently it just blindly writes beyond the end of the array, leading to impossible-to-find bugs.
It doesn't help that the limit on the number of characteristics doesn't seem to be documented anywhere.
Changed in this revision
| source/nRF5xGattServer.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/source/nRF5xGattServer.cpp Fri Sep 25 15:26:59 2015 +0100
+++ b/source/nRF5xGattServer.cpp Mon Nov 02 09:05:09 2015 +0000
@@ -45,7 +45,6 @@
/**************************************************************************/
ble_error_t nRF5xGattServer::addService(GattService &service)
{
- /* ToDo: Make sure we don't overflow the array, etc. */
/* ToDo: Make sure this service UUID doesn't already exist (?) */
/* ToDo: Basic validation */
@@ -63,7 +62,10 @@
/* Add characteristics to the service */
for (uint8_t i = 0; i < service.getCharacteristicCount(); i++) {
- GattCharacteristic *p_char = service.getCharacteristic(i);
+ if (characteristicCount >= BLE_TOTAL_CHARACTERISTICS) {
+ return BLE_ERROR_NO_MEM;
+ }
+ GattCharacteristic *p_char = service.getCharacteristic(i);
/* Skip any incompletely defined, read-only characteristics. */
if ((p_char->getValueAttribute().getValuePtr() == NULL) &&
@@ -108,9 +110,12 @@
characteristicCount++;
/* Add optional descriptors if any */
- /* ToDo: Make sure we don't overflow the array */
for (uint8_t j = 0; j < p_char->getDescriptorCount(); j++) {
- GattAttribute *p_desc = p_char->getDescriptor(j);
+ if (descriptorCount >= BLE_TOTAL_DESCRIPTORS) {
+ return BLE_ERROR_NO_MEM;
+ }
+
+ GattAttribute *p_desc = p_char->getDescriptor(j);
/* skip the user-description-descriptor here; this has already been handled when adding the characteristic (above). */
if (p_desc->getUUID() == BLE_UUID_DESCRIPTOR_CHAR_USER_DESC) {
continue;
