From d8644fe819d508a358ca53ca57e44d84b527d8f2 Mon Sep 17 00:00:00 2001 From: Maschell Date: Tue, 24 Jan 2023 13:53:27 +0100 Subject: [PATCH] StorageAPI: Make sure the parent has the type WUPS_STORAGE_TYPE_ITEM --- libraries/libwups/storage.cpp | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/libraries/libwups/storage.cpp b/libraries/libwups/storage.cpp index 2449e13..c097008 100644 --- a/libraries/libwups/storage.cpp +++ b/libraries/libwups/storage.cpp @@ -132,12 +132,14 @@ WUPSStorageError WUPS_DeleteItem(wups_storage_item_t *parent, const char *key) { return WUPS_STORAGE_ERROR_INVALID_ARGS; } - isDirty = true; - if (!parent) { parent = &rootItem; + } else if (parent->type != WUPS_STORAGE_TYPE_ITEM) { + return WUPS_STORAGE_ERROR_INVALID_ARGS; } + isDirty = true; + for (uint32_t i = 0; i < parent->data_size; i++) { wups_storage_item_t *item = &((wups_storage_item_t *) parent->data)[i]; @@ -231,12 +233,14 @@ WUPSStorageError WUPS_CreateSubItem(wups_storage_item_t *parent, const char *key return WUPS_STORAGE_ERROR_INVALID_ARGS; } - isDirty = true; - if (!parent) { parent = &rootItem; + } else if (parent->type != WUPS_STORAGE_TYPE_ITEM) { + return WUPS_STORAGE_ERROR_INVALID_ARGS; } + isDirty = true; + wups_storage_item_t *item = addItem(parent, key, WUPS_STORAGE_TYPE_ITEM); *outItem = item; @@ -258,6 +262,8 @@ WUPSStorageError WUPS_GetSubItem(wups_storage_item_t *parent, const char *key, w if (!parent) { parent = &rootItem; + } else if (parent->type != WUPS_STORAGE_TYPE_ITEM) { + return WUPS_STORAGE_ERROR_INVALID_ARGS; } for (uint32_t i = 0; i < parent->data_size; i++) { @@ -289,12 +295,14 @@ WUPSStorageError WUPS_StoreString(wups_storage_item_t *parent, const char *key, return WUPS_STORAGE_ERROR_INVALID_ARGS; } - isDirty = true; - if (!parent) { parent = &rootItem; + } else if (parent->type != WUPS_STORAGE_TYPE_ITEM) { + return WUPS_STORAGE_ERROR_INVALID_ARGS; } + isDirty = true; + wups_storage_item_t *item = addItem(parent, key, WUPS_STORAGE_TYPE_STRING); uint32_t size = strlen(string) + 1; @@ -322,12 +330,14 @@ WUPSStorageError WUPS_StoreInt(wups_storage_item_t *parent, const char *key, int return WUPS_STORAGE_ERROR_INVALID_ARGS; } - isDirty = true; - if (!parent) { parent = &rootItem; + } else if (parent->type != WUPS_STORAGE_TYPE_ITEM) { + return WUPS_STORAGE_ERROR_INVALID_ARGS; } + isDirty = true; + wups_storage_item_t *item = addItem(parent, key, WUPS_STORAGE_TYPE_INT); item->data = malloc(sizeof(int32_t)); @@ -352,6 +362,8 @@ WUPSStorageError WUPS_StoreBinary(wups_storage_item_t *parent, const char *key, if (!parent) { parent = &rootItem; + } else if (parent->type != WUPS_STORAGE_TYPE_ITEM) { + return WUPS_STORAGE_ERROR_INVALID_ARGS; } isDirty = true; @@ -379,6 +391,8 @@ WUPSStorageError WUPS_GetString(wups_storage_item_t *parent, const char *key, ch if (!parent) { parent = &rootItem; + } else if (parent->type != WUPS_STORAGE_TYPE_ITEM) { + return WUPS_STORAGE_ERROR_INVALID_ARGS; } for (uint32_t i = 0; i < parent->data_size; i++) { @@ -423,6 +437,8 @@ WUPSStorageError WUPS_GetInt(wups_storage_item_t *parent, const char *key, int32 if (!parent) { parent = &rootItem; + } else if (parent->type != WUPS_STORAGE_TYPE_ITEM) { + return WUPS_STORAGE_ERROR_INVALID_ARGS; } for (uint32_t i = 0; i < parent->data_size; i++) { @@ -456,6 +472,8 @@ WUPSStorageError WUPS_GetBinary(wups_storage_item_t *parent, const char *key, vo if (!parent) { parent = &rootItem; + } else if (parent->type != WUPS_STORAGE_TYPE_ITEM) { + return WUPS_STORAGE_ERROR_INVALID_ARGS; } for (uint32_t i = 0; i < parent->data_size; i++) {