diff --git a/internal/core/src/index/Utils.h b/internal/core/src/index/Utils.h index 31fccad703..4a7dc94629 100644 --- a/internal/core/src/index/Utils.h +++ b/internal/core/src/index/Utils.h @@ -84,6 +84,9 @@ template inline std::optional GetValueFromConfig(const Config& cfg, const std::string& key) { if (cfg.contains(key)) { + if (cfg.at(key).is_null()) { + return std::nullopt; + } try { // compatibility for boolean string if constexpr (std::is_same_v) { diff --git a/internal/core/unittest/test_c_api.cpp b/internal/core/unittest/test_c_api.cpp index 219593922b..060c41ecf0 100644 --- a/internal/core/unittest/test_c_api.cpp +++ b/internal/core/unittest/test_c_api.cpp @@ -5285,7 +5285,7 @@ TEST(CApiTest, IsLoadWithDisk) { TEST(CApiTest, TestGetValueFromConfig) { nlohmann::json cfg = nlohmann::json::parse( - R"({"a" : 100, "b" : true, "c" : "true", "d" : 1.234})"); + R"({"a" : 100, "b" : true, "c" : "true", "d" : 1.234, "e" : null})"); auto a_value = GetValueFromConfig(cfg, "a"); ASSERT_EQ(a_value.value(), 100); @@ -5306,4 +5306,7 @@ TEST(CApiTest, TestGetValueFromConfig) { std::string::npos, true); } + + auto e_value = GetValueFromConfig(cfg, "e"); + ASSERT_FALSE(e_value.has_value()); }