mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-04-12 17:31:09 +08:00
Fix vuln OSV-2023-77 (#5210)
This commit is contained in:
parent
c83ca7dff3
commit
7f27ba8c3a
@ -116,7 +116,8 @@
|
||||
/* Helper routines */
|
||||
static size_t H5C__cache_image_block_entry_header_size(const H5F_t *f);
|
||||
static size_t H5C__cache_image_block_header_size(const H5F_t *f);
|
||||
static herr_t H5C__decode_cache_image_header(const H5F_t *f, H5C_t *cache_ptr, const uint8_t **buf);
|
||||
static herr_t H5C__decode_cache_image_header(const H5F_t *f, H5C_t *cache_ptr, const uint8_t **buf,
|
||||
size_t buf_size);
|
||||
#ifndef NDEBUG /* only used in assertions */
|
||||
static herr_t H5C__decode_cache_image_entry(const H5F_t *f, const H5C_t *cache_ptr, const uint8_t **buf,
|
||||
unsigned entry_num);
|
||||
@ -297,7 +298,7 @@ H5C__construct_cache_image_buffer(H5F_t *f, H5C_t *cache_ptr)
|
||||
/* needed for sanity checks */
|
||||
fake_cache_ptr->image_len = cache_ptr->image_len;
|
||||
q = (const uint8_t *)cache_ptr->image_buffer;
|
||||
status = H5C__decode_cache_image_header(f, fake_cache_ptr, &q);
|
||||
status = H5C__decode_cache_image_header(f, fake_cache_ptr, &q, cache_ptr->image_len + 1);
|
||||
assert(status >= 0);
|
||||
|
||||
assert(NULL != p);
|
||||
@ -1267,7 +1268,7 @@ H5C__cache_image_block_header_size(const H5F_t *f)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5C__decode_cache_image_header(const H5F_t *f, H5C_t *cache_ptr, const uint8_t **buf)
|
||||
H5C__decode_cache_image_header(const H5F_t *f, H5C_t *cache_ptr, const uint8_t **buf, size_t buf_size)
|
||||
{
|
||||
uint8_t version;
|
||||
uint8_t flags;
|
||||
@ -1287,6 +1288,10 @@ H5C__decode_cache_image_header(const H5F_t *f, H5C_t *cache_ptr, const uint8_t *
|
||||
/* Point to buffer to decode */
|
||||
p = *buf;
|
||||
|
||||
/* Ensure buffer has enough data for signature comparison */
|
||||
if (H5_IS_BUFFER_OVERFLOW(p, H5C__MDCI_BLOCK_SIGNATURE_LEN, *buf + buf_size - 1))
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_OVERFLOW, FAIL, "Insufficient buffer size for signature");
|
||||
|
||||
/* Check signature */
|
||||
if (memcmp(p, H5C__MDCI_BLOCK_SIGNATURE, (size_t)H5C__MDCI_BLOCK_SIGNATURE_LEN) != 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "Bad metadata cache image header signature");
|
||||
@ -2386,7 +2391,7 @@ H5C__reconstruct_cache_contents(H5F_t *f, H5C_t *cache_ptr)
|
||||
|
||||
/* Decode metadata cache image header */
|
||||
p = (uint8_t *)cache_ptr->image_buffer;
|
||||
if (H5C__decode_cache_image_header(f, cache_ptr, &p) < 0)
|
||||
if (H5C__decode_cache_image_header(f, cache_ptr, &p, cache_ptr->image_len + 1) < 0)
|
||||
HGOTO_ERROR(H5E_CACHE, H5E_CANTDECODE, FAIL, "cache image header decode failed");
|
||||
assert((size_t)(p - (uint8_t *)cache_ptr->image_buffer) < cache_ptr->image_len);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user