From f53dbee3b557a87eb34d3d631312b946574abcab Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Thu, 8 Apr 2021 12:59:44 -0700 Subject: [PATCH 1/3] ColTypeDim: Fix Potential Segfault From the docs: ``` Name: H5Tget_member_name ... The HDF5 Library allocates a buffer to receive the name of the field. The caller must subsequently free the buffer with H5free_memory. ``` Refs.: - https://support.hdfgroup.org/HDF5/doc/RM/RM_H5T.html#Datatype-GetMemberName - https://support.hdfgroup.org/HDF5/doc/RM/RM_H5.html#Library-FreeMemory --- src/include/splash/basetypes/ColTypeDim.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/include/splash/basetypes/ColTypeDim.hpp b/src/include/splash/basetypes/ColTypeDim.hpp index 937dafb..12b51a9 100644 --- a/src/include/splash/basetypes/ColTypeDim.hpp +++ b/src/include/splash/basetypes/ColTypeDim.hpp @@ -77,9 +77,9 @@ namespace splash if(strcmp("x", m0) == 0 && strcmp("y", m1) == 0 && strcmp("z", m2) == 0) found = true; - free(m2); - free(m1); - free(m0); + H5free_memory(m2); + H5free_memory(m1); + H5free_memory(m0); } } } From 593ea6150ef2a0aa714ff306f518ef2daaa9e80b Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Thu, 8 Apr 2021 13:04:30 -0700 Subject: [PATCH 2/3] Fix more free -> H5free_memory Introduced in 2da14a60f2244881829d95987ac6f90cfd34a33b --- src/include/splash/basetypes/ColTypeBool.hpp | 4 ++-- src/include/splash/basetypes/basetypes_compound.hpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/include/splash/basetypes/ColTypeBool.hpp b/src/include/splash/basetypes/ColTypeBool.hpp index 534ee70..295edff 100644 --- a/src/include/splash/basetypes/ColTypeBool.hpp +++ b/src/include/splash/basetypes/ColTypeBool.hpp @@ -71,8 +71,8 @@ class ColTypeBool : public CollectionType char* m1 = H5Tget_member_name(datatype_id,1); if(strcmp("TRUE" , m0) == 0 && strcmp("FALSE", m1) == 0) found = true; - free(m1); - free(m0); + H5free_memory(m1); + H5free_memory(m0); } } diff --git a/src/include/splash/basetypes/basetypes_compound.hpp b/src/include/splash/basetypes/basetypes_compound.hpp index ee2241b..56313e9 100644 --- a/src/include/splash/basetypes/basetypes_compound.hpp +++ b/src/include/splash/basetypes/basetypes_compound.hpp @@ -74,7 +74,7 @@ namespace splash { \ found = true; \ } \ - free(mname); \ + H5free_memory(mname); \ H5Tclose(mtype); \ } \ } \ From 7058794aebaa8677316c4222a12e0b8e2022eacd Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Thu, 8 Apr 2021 14:10:19 -0700 Subject: [PATCH 3/3] avoid undefined behavior in str(n)cmp Passing potential `NULL` is undefined behavior. --- src/include/splash/basetypes/ColTypeBool.hpp | 5 +++-- src/include/splash/basetypes/ColTypeDim.hpp | 5 +++-- src/include/splash/basetypes/basetypes_compound.hpp | 9 ++++++--- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/include/splash/basetypes/ColTypeBool.hpp b/src/include/splash/basetypes/ColTypeBool.hpp index 295edff..bb1a715 100644 --- a/src/include/splash/basetypes/ColTypeBool.hpp +++ b/src/include/splash/basetypes/ColTypeBool.hpp @@ -69,8 +69,9 @@ class ColTypeBool : public CollectionType { char* m0 = H5Tget_member_name(datatype_id,0); char* m1 = H5Tget_member_name(datatype_id,1); - if(strcmp("TRUE" , m0) == 0 && strcmp("FALSE", m1) == 0) - found = true; + if(m0 != NULL && m1 != NULL) + if(strcmp("TRUE" , m0) == 0 && strcmp("FALSE", m1) == 0) + found = true; H5free_memory(m1); H5free_memory(m0); } diff --git a/src/include/splash/basetypes/ColTypeDim.hpp b/src/include/splash/basetypes/ColTypeDim.hpp index 12b51a9..a5c93e9 100644 --- a/src/include/splash/basetypes/ColTypeDim.hpp +++ b/src/include/splash/basetypes/ColTypeDim.hpp @@ -74,8 +74,9 @@ namespace splash char* m0 = H5Tget_member_name(datatype_id, 0); char* m1 = H5Tget_member_name(datatype_id, 1); char* m2 = H5Tget_member_name(datatype_id, 2); - if(strcmp("x", m0) == 0 && strcmp("y", m1) == 0 && strcmp("z", m2) == 0) - found = true; + if(m0 != NULL && m1 != NULL && m2 != NULL) + if(strcmp("x", m0) == 0 && strcmp("y", m1) == 0 && strcmp("z", m2) == 0) + found = true; H5free_memory(m2); H5free_memory(m1); diff --git a/src/include/splash/basetypes/basetypes_compound.hpp b/src/include/splash/basetypes/basetypes_compound.hpp index 56313e9..9d76bc9 100644 --- a/src/include/splash/basetypes/basetypes_compound.hpp +++ b/src/include/splash/basetypes/basetypes_compound.hpp @@ -69,10 +69,13 @@ namespace splash { \ hid_t mtype = H5Tget_member_type(datatype_id, i); \ char* mname = H5Tget_member_name(datatype_id, i); \ - if(H5Tequal(mtype, _h5_type) == 1 && \ - strcmp(COMPOUND_ELEMENTS[i], mname) == 0) \ + if(mname != NULL) \ { \ - found = true; \ + if(H5Tequal(mtype, _h5_type) == 1 && \ + strcmp(COMPOUND_ELEMENTS[i], mname) == 0) \ + { \ + found = true; \ + } \ } \ H5free_memory(mname); \ H5Tclose(mtype); \