From 622b7d31e8bc8089cec374fddb9eb02b7ecd8a76 Mon Sep 17 00:00:00 2001 From: Nicolas Cornu Date: Tue, 11 Jul 2023 10:48:33 +0200 Subject: [PATCH] Free return of H5Tget_member_name --- include/highfive/H5DataType.hpp | 5 +++-- tests/unit/tests_high_five_base.cpp | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/include/highfive/H5DataType.hpp b/include/highfive/H5DataType.hpp index 23f246c6f..3ebfa6879 100644 --- a/include/highfive/H5DataType.hpp +++ b/include/highfive/H5DataType.hpp @@ -239,11 +239,12 @@ class CompoundType: public DataType { size_t n_members = static_cast(result); members.reserve(n_members); for (unsigned i = 0; i < n_members; i++) { - const char* name = H5Tget_member_name(_hid, i); + char* name = H5Tget_member_name(_hid, i); size_t offset = H5Tget_member_offset(_hid, i); hid_t member_hid = H5Tget_member_type(_hid, i); DataType member_type{member_hid}; - members.emplace_back(name, member_type, offset); + members.emplace_back(std::string(name), member_type, offset); + H5free_memory(name); } } diff --git a/tests/unit/tests_high_five_base.cpp b/tests/unit/tests_high_five_base.cpp index 008f0cc74..3f995f90d 100644 --- a/tests/unit/tests_high_five_base.cpp +++ b/tests/unit/tests_high_five_base.cpp @@ -2643,6 +2643,10 @@ TEST_CASE("HighFiveCompounds") { CompoundType t2_from_hid(t2); CHECK(t2 == t2_from_hid); + + // Back from a DataType + CHECK_NOTHROW(CompoundType(DataType(t1_from_hid))); + CHECK_THROWS(CompoundType(AtomicType{})); } struct GrandChild {