diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-06-10 14:31:33 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-10 14:31:33 +0200 |
| commit | adc18aee528cb123ad4215c49d12d399cbafa1d4 (patch) | |
| tree | 725dc7c60e498fe4f4923a0cf25765b524653950 | |
| parent | 144a611f844450f5ce4528772136f985c92406fe (diff) | |
| parent | adeca911c16bc783963ee98d075a75b70d46b110 (diff) | |
| download | PROJ-adc18aee528cb123ad4215c49d12d399cbafa1d4.tar.gz PROJ-adc18aee528cb123ad4215c49d12d399cbafa1d4.zip | |
Merge pull request #2260 from ollira/fix-proj_context_get_database_metadata
Fix access violation in proj_context_get_database_metadata
| -rw-r--r-- | src/iso19111/c_api.cpp | 4 | ||||
| -rw-r--r-- | test/unit/test_c_api.cpp | 3 |
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); } // --------------------------------------------------------------------------- |
