File Mark-datatype-as-freed-always.patch of Package hdf5.34857
From: Egbert Eich <eich@suse.com>
Date: Fri Jun 7 11:20:01 2024 +0200
Subject: Mark datatype as freed always.
Patch-mainline: Upstream
Git-repo: https://github.com/HDFGroup/hdf5
Git-commit: 9de2d3a5b789d765b093b294a1722fa9d485743a
References: bsc#1224158
Even on error the Copy functions free the source datatype.
This fixes certain fallouts from CVEs.
Signed-off-by: Egbert Eich <eich@suse.com>
Signed-off-by: Egbert Eich <eich@suse.de>
---
src/H5Olayout.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/src/H5Olayout.c b/src/H5Olayout.c
index 3536648ef0..dcb6760c55 100644
--- a/src/H5Olayout.c
+++ b/src/H5Olayout.c
@@ -1261,10 +1261,10 @@ H5O__layout_copy_file(H5F_t *file_src, void *mesg_src, H5F_t *file_dst,
case H5D_COMPACT:
if (layout_src->storage.u.compact.buf) {
/* copy compact raw data */
+ copied = true;
if (H5D__compact_copy(file_src, &layout_src->storage.u.compact, file_dst,
&layout_dst->storage.u.compact, udata->src_dtype, cpy_info) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "unable to copy chunked storage")
- copied = true;
} /* end if */
break;
@@ -1292,10 +1292,10 @@ H5O__layout_copy_file(H5F_t *file_src, void *mesg_src, H5F_t *file_dst,
(cpy_info->shared_fo &&
H5D__contig_is_data_cached((const H5D_shared_t *)cpy_info->shared_fo))) {
/* copy contiguous raw data */
+ copied = true;
if (H5D__contig_copy(file_src, &layout_src->storage.u.contig, file_dst,
&layout_dst->storage.u.contig, udata->src_dtype, cpy_info) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "unable to copy contiguous storage")
- copied = true;
} /* end if */
} break;
@@ -1304,11 +1304,11 @@ H5O__layout_copy_file(H5F_t *file_src, void *mesg_src, H5F_t *file_dst,
(cpy_info->shared_fo &&
H5D__chunk_is_data_cached((const H5D_shared_t *)cpy_info->shared_fo))) {
/* Create chunked layout */
+ copied = true;
if (H5D__chunk_copy(file_src, &layout_src->storage.u.chunk, &layout_src->u.chunk, file_dst,
&layout_dst->storage.u.chunk, udata->src_space_extent, udata->src_dtype,
udata->common.src_pline, cpy_info) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "unable to copy chunked storage")
- copied = true;
} /* end if */
break;
@@ -1325,14 +1325,13 @@ H5O__layout_copy_file(H5F_t *file_src, void *mesg_src, H5F_t *file_dst,
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "Invalid layout class")
} /* end switch */
- /* Check if copy routine was invoked (which frees the source datatype) */
- if (copied)
- udata->src_dtype = NULL;
-
/* Set return value */
ret_value = layout_dst;
done:
+ /* Check if copy routine was invoked (which frees the source datatype) */
+ if (copied)
+ udata->src_dtype = NULL;
if (!ret_value)
if (layout_dst)
layout_dst = H5FL_FREE(H5O_layout_t, layout_dst);