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.
Dependencies: BLE_API mbed-dev-bin nRF51822
Fork of microbit-dal by
Diff: source/drivers/MicroBitStorage.cpp
- Revision:
- 32:ece16b5987dd
- Parent:
- 31:87789e55bac7
- Child:
- 35:8ce23bc1af38
diff -r 87789e55bac7 -r ece16b5987dd source/drivers/MicroBitStorage.cpp
--- a/source/drivers/MicroBitStorage.cpp Wed Jul 13 12:18:10 2016 +0100
+++ b/source/drivers/MicroBitStorage.cpp Wed Jul 13 12:18:11 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);
}
/**
