summaryrefslogtreecommitdiffstats
path: root/src/H5FScache.c
diff options
context:
space:
mode:
authorjhendersonHDF <jhenderson@hdfgroup.org>2023-08-18 21:00:10 (GMT)
committerGitHub <noreply@github.com>2023-08-18 21:00:10 (GMT)
commit31f4d5aa4e1f174cef8163e4af40f7bea728cd0c (patch)
treeee2bec7bbd53f0d12002435bcd7fd2ef57829eda /src/H5FScache.c
parent71d98e07061f367a2d66a513a267401a89323e61 (diff)
downloadhdf5-31f4d5aa4e1f174cef8163e4af40f7bea728cd0c.zip
hdf5-31f4d5aa4e1f174cef8163e4af40f7bea728cd0c.tar.gz
hdf5-31f4d5aa4e1f174cef8163e4af40f7bea728cd0c.tar.bz2
Fix valgrind warning about write of uninitialized bytes (#3389)
Diffstat (limited to 'src/H5FScache.c')
-rw-r--r--src/H5FScache.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/H5FScache.c b/src/H5FScache.c
index 28fe2a4..420582e 100644
--- a/src/H5FScache.c
+++ b/src/H5FScache.c
@@ -1185,8 +1185,9 @@ done:
static herr_t
H5FS__cache_sinfo_serialize(const H5F_t *f, void *_image, size_t len, void *_thing)
{
- H5FS_sinfo_t *sinfo = (H5FS_sinfo_t *)_thing; /* Pointer to the object */
- H5FS_iter_ud_t udata; /* User data for callbacks */
+ H5FS_sinfo_t *sinfo = (H5FS_sinfo_t *)_thing; /* Pointer to the object */
+ H5FS_iter_ud_t udata; /* User data for callbacks */
+ ptrdiff_t gap_size;
uint8_t *image = (uint8_t *)_image; /* Pointer into raw data buffer */
uint8_t *chksum_image = NULL; /* Points to chksum location */
uint32_t metadata_chksum; /* Computed metadata checksum value */
@@ -1231,7 +1232,17 @@ H5FS__cache_sinfo_serialize(const H5F_t *f, void *_image, size_t len, void *_thi
/* Compute checksum */
/* There may be empty space between entries and chksum */
- chksum_image = (uint8_t *)(_image) + len - H5FS_SIZEOF_CHKSUM;
+ chksum_image = (uint8_t *)(_image) + len - H5FS_SIZEOF_CHKSUM;
+
+ /*
+ * If there is any empty space between the entries and
+ * checksum, make sure that the space is initialized
+ * before serializing it
+ */
+ gap_size = chksum_image - image;
+ if (gap_size > 0)
+ memset(image, 0, (size_t)gap_size);
+
metadata_chksum = H5_checksum_metadata(_image, (size_t)(chksum_image - (uint8_t *)_image), 0);
/* Metadata checksum */
UINT32ENCODE(chksum_image, metadata_chksum);