diff --git a/src/configmanager_priv.h b/src/configmanager_priv.h index 7c54e52..16f95e3 100644 --- a/src/configmanager_priv.h +++ b/src/configmanager_priv.h @@ -45,7 +45,7 @@ esp_err_t ConfigManager::init(const char *ns) return result; } #endif -#else +#else // CONFIG_NVS_ENCRYPTION const esp_partition_t *key_part = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_NVS_KEYS, NULL); if (!key_part) { @@ -87,7 +87,7 @@ esp_err_t ConfigManager::init(const char *ns) return result; } #endif -#endif +#endif // CONFIG_NVS_ENCRYPTION { const auto result = nvs_open_from_partition("nvs", ns, NVS_READWRITE, &nvs_handle_user); @@ -119,12 +119,19 @@ esp_err_t ConfigManager::loadFromFlash() bool success = true; ConfigContainer::callForEveryConfig([&](ConfigWrapperInterface &config){ + if (strlen(config.nvsName()) > 15) + { + ESP_LOGW(TAG, "config key '%s' is longer than 15 characters", config.nvsName()); + success = false; + return false; // don't abort loop + } + if (const auto result = config.loadFromFlash(nvs_handle_user); !result) { ESP_LOGE(TAG, "config parameter %s failed to load: %.*s", config.nvsName(), result.error().size(), result.error().data()); success = false; } - return false; // dont abort the loop + return false; // don't abort the loop }); const auto after = espchrono::millis_clock::now(); diff --git a/src/configwrapper.h b/src/configwrapper.h index 3bf8630..a37b815 100644 --- a/src/configwrapper.h +++ b/src/configwrapper.h @@ -39,7 +39,17 @@ public: virtual ConfigConstraintReturnType checkValue(value_t value) const = 0; - const T &value() const { return m_value; } + const T &value() const + { +#if defined(CONFIG_COMPILER_CXX_EXCEPTIONS) && CONFIG_COMPILER_CXX_EXCEPTIONS != 0 + if (!m_loaded) + throw std::runtime_error("ConfigWrapper::value() called without loading first"); +#else +#warning "COMPILER_CXX_EXCEPTIONS disabled, ConfigWrapper::value() called without loading first will assert" + assert(m_loaded); +#endif + return m_value; + } private: ConfigStatusReturnType writeToFlash(nvs_handle_t nvsHandle, value_t value);