diff options
author | mattjala <124107509+mattjala@users.noreply.github.com> | 2023-11-22 13:55:25 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-22 13:55:25 (GMT) |
commit | af4c6c4f1579802f00fa5ef24c35ce4086d78591 (patch) | |
tree | 6d8e64407f9285479caae7f60e343787691a0d00 /src | |
parent | 3ea21ccb3e84dae935c32faff5d10ce9672a3265 (diff) | |
download | hdf5-af4c6c4f1579802f00fa5ef24c35ce4086d78591.zip hdf5-af4c6c4f1579802f00fa5ef24c35ce4086d78591.tar.gz hdf5-af4c6c4f1579802f00fa5ef24c35ce4086d78591.tar.bz2 |
Fix segfault on user compound dtype conversion callback (#3842)
* Fix segfault on user compound conversion
* Check if lib conversion func is in use
Diffstat (limited to 'src')
-rw-r--r-- | src/H5T.c | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -5174,10 +5174,10 @@ H5T_path_noop(const H5T_path_t *p) /*------------------------------------------------------------------------- * Function: H5T_path_compound_subset * - * Purpose: Checks if the source and destination types are both compound. - * Tells whether whether the source members are a subset of - * destination, and the order is the same, and no conversion - * is needed. For example: + * Purpose: Checks if the library's compound conversion function + * is in use. Tells whether whether the source members are + * a subset of destination, and the order is the same, and + * no conversion is needed. For example: * struct source { struct destination { * TYPE1 A; --> TYPE1 A; * TYPE2 B; --> TYPE2 B; @@ -5186,8 +5186,9 @@ H5T_path_noop(const H5T_path_t *p) * TYPE5 E; * }; * - * Return: A pointer to the subset info struct in p, or NULL if there are - * no compounds. Points directly into the H5T_path_t structure. + * Return: A pointer to the subset info struct in p, or NULL if the + * library's compound conversion function is not in use. + * Points directly into the H5T_path_t structure. * *------------------------------------------------------------------------- */ @@ -5200,7 +5201,9 @@ H5T_path_compound_subset(const H5T_path_t *p) assert(p); - if (p->are_compounds) + /* Only retrieve private info if the library compound conversion + * function is in use */ + if (!p->conv.is_app && (p->conv.u.lib_func == H5T__conv_struct)) ret_value = H5T__conv_struct_subset(&(p->cdata)); FUNC_LEAVE_NOAPI(ret_value) |