aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/iso19111/c_api.cpp4
-rw-r--r--test/unit/test_c_api.cpp3
2 files changed, 7 insertions, 0 deletions
diff --git a/src/iso19111/c_api.cpp b/src/iso19111/c_api.cpp
index 340d9fb9..90c8a8cd 100644
--- a/src/iso19111/c_api.cpp
+++ b/src/iso19111/c_api.cpp
@@ -348,6 +348,10 @@ const char *proj_context_get_database_metadata(PJ_CONTEXT *ctx,
// temporary variable must be used as getDBcontext() might create
// ctx->cpp_context
auto osVal(getDBcontext(ctx)->getMetadata(key));
+ if (osVal == nullptr) {
+ ctx->cpp_context->autoCloseDbIfNeeded();
+ return nullptr;
+ }
ctx->cpp_context->lastDbMetadataItem_ = osVal;
ctx->cpp_context->autoCloseDbIfNeeded();
return ctx->cpp_context->lastDbMetadataItem_.c_str();
diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp
index a294550e..2847d88d 100644
--- a/test/unit/test_c_api.cpp
+++ b/test/unit/test_c_api.cpp
@@ -2616,6 +2616,9 @@ TEST_F(CApi, proj_cs_get_axis_info) {
TEST_F(CApi, proj_context_get_database_metadata) {
EXPECT_TRUE(proj_context_get_database_metadata(m_ctxt, "IGNF.VERSION") !=
nullptr);
+
+ EXPECT_TRUE(proj_context_get_database_metadata(m_ctxt, "FOO") ==
+ nullptr);
}
// ---------------------------------------------------------------------------