Skip to content

Commit

Permalink
Fix for github issue HDFGroup#2414: segfault when copying dataset wit…
Browse files Browse the repository at this point in the history
…h attrib… (HDFGroup#3967)

* Fix for github issue HDFGroup#2414: segfault when copying dataset with attributes.
This also fixes github issue HDFGroup#3241: segfault when copying dataset.
Need to set the location via H5T_set_loc() of the src datatype
when copying dense attributes.
Otherwise the vlen callbacks are not set up therefore causing seg fault
when doing H5T_convert() -> H5T__conv_vlen().
  • Loading branch information
vchoi-hdfgroup authored and lrknox committed Feb 14, 2024
1 parent fbe0c87 commit 5153821
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions src/H5Aint.c
Original file line number Diff line number Diff line change
Expand Up @@ -2455,6 +2455,10 @@ H5A__dense_post_copy_file_cb(const H5A_t *attr_src, void *_udata)
assert(udata->file);
assert(udata->cpy_info);

/* Set the location of the src datatype */
if (H5T_set_loc(attr_src->shared->dt, H5F_VOL_OBJ(udata->oloc_src->file), H5T_LOC_DISK) < 0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, H5_ITER_ERROR, "cannot mark datatype on disk");

if (NULL ==
(attr_dst = H5A__attr_copy_file(attr_src, udata->file, udata->recompute_size, udata->cpy_info)))
HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, H5_ITER_ERROR, "can't copy attribute");
Expand All @@ -2464,7 +2468,7 @@ H5A__dense_post_copy_file_cb(const H5A_t *attr_src, void *_udata)

/* Reset shared location information */
if (H5O_msg_reset_share(H5O_ATTR_ID, attr_dst) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to reset attribute sharing");
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, H5_ITER_ERROR, "unable to reset attribute sharing");

/* Set COPIED tag for destination object's metadata */
H5_BEGIN_TAG(H5AC__COPIED_TAG)
Expand All @@ -2478,7 +2482,7 @@ H5A__dense_post_copy_file_cb(const H5A_t *attr_src, void *_udata)

done:
if (attr_dst && H5A__close(attr_dst) < 0)
HDONE_ERROR(H5E_ATTR, H5E_CLOSEERROR, FAIL, "can't close destination attribute");
HDONE_ERROR(H5E_ATTR, H5E_CLOSEERROR, H5_ITER_ERROR, "can't close destination attribute");

FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A__dense_post_copy_file_cb() */
Expand Down

0 comments on commit 5153821

Please sign in to comment.