My fork

Dependencies:   BLE_API mbed-dev-bin nRF51822-bluetooth-mdw

Fork of microbit-dal-bluetooth-mdw by Martin Woolley

Revision:
37:b624ae5e94a5
Parent:
35:8ce23bc1af38
Child:
48:34d1adb6771c
diff -r 6837feb07da4 -r b624ae5e94a5 source/drivers/MicroBitStorage.cpp
--- a/source/drivers/MicroBitStorage.cpp	Wed Jul 13 12:18:15 2016 +0100
+++ b/source/drivers/MicroBitStorage.cpp	Wed Jul 13 12:18:16 2016 +0100
@@ -209,14 +209,22 @@
   *
   * @param data a pointer to the beginning of the data to be persisted.
   *
-  * @return MICROBIT_OK on success, or MICROBIT_NO_RESOURCES if the storage page is full
+  * @param dataSize the size of the data to be persisted
+  *
+  * @return MICROBIT_OK on success, MICROBIT_INVALID_PARAMETER if the key or size is too large,
+  *         MICROBIT_NO_RESOURCES if the storage page is full
   */
-int MicroBitStorage::put(const char *key, uint8_t *data)
+int MicroBitStorage::put(const char *key, uint8_t *data, int dataSize)
 {
     KeyValuePair pair = KeyValuePair();
 
-    memcpy(pair.key, key, min(sizeof(pair.key), strlen(key)));
-    memcpy(pair.value, data, sizeof(pair.value));
+    int keySize = strlen(key) + 1;
+
+    if(keySize > (int)sizeof(pair.key) || dataSize > (int)sizeof(pair.value) || dataSize < 0)
+        return MICROBIT_INVALID_PARAMETER;
+
+    memcpy(pair.key, key, keySize);
+    memcpy(pair.value, data, dataSize);
 
     //calculate our various offsets.
     uint32_t pg_size = NRF_FICR->CODEPAGESIZE;
@@ -290,11 +298,14 @@
   *
   * @param data a pointer to the beginning of the data to be persisted.
   *
-  * @return MICROBIT_OK on success, or MICROBIT_NO_RESOURCES if the storage page is full
+  * @param dataSize the size of the data to be persisted
+  *
+  * @return MICROBIT_OK on success, MICROBIT_INVALID_PARAMETER if the key or size is too large,
+  *         MICROBIT_NO_RESOURCES if the storage page is full
   */
-int MicroBitStorage::put(ManagedString key, uint8_t* data)
+int MicroBitStorage::put(ManagedString key, uint8_t* data, int dataSize)
 {
-    return put((char *)key.toCharArray(), data);
+    return put((char *)key.toCharArray(), data, dataSize);
 }
 
 /**