diff options
author | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2018-07-16 04:31:09 (GMT) |
---|---|---|
committer | M. Scot Breitenfeld <brtnfld@hdfgroup.org> | 2018-07-26 22:19:11 (GMT) |
commit | d0362ce438aef8ad690d5b084d929403c9877107 (patch) | |
tree | ba42c7d25552a60f87b4d35059bd435443a52753 /src/H5Dbtree.c | |
parent | e57234b027b10c4bd0ba77b4ce9b4668ba964ffa (diff) | |
download | hdf5-d0362ce438aef8ad690d5b084d929403c9877107.zip hdf5-d0362ce438aef8ad690d5b084d929403c9877107.tar.gz hdf5-d0362ce438aef8ad690d5b084d929403c9877107.tar.bz2 |
Fixed division-by-zero issues
Description:
Fixed HDFFV-10481 and HDFFV-10477, division by 0.
Fixed another occurrence beside what were reported.
Also, changed a local variable to avoid an unnecessary cast.
Platforms tested:
Linux/64 (jelly)
Linux/32 (jam)
Darwin (osx1010test)
Diffstat (limited to 'src/H5Dbtree.c')
-rw-r--r-- | src/H5Dbtree.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/H5Dbtree.c b/src/H5Dbtree.c index c23f089..04f5419 100644 --- a/src/H5Dbtree.c +++ b/src/H5Dbtree.c @@ -666,12 +666,13 @@ done: static herr_t H5D__btree_decode_key(const H5B_shared_t *shared, const uint8_t *raw, void *_key) { - const H5O_layout_chunk_t *layout; /* Chunk layout description */ - H5D_btree_key_t *key = (H5D_btree_key_t *) _key; /* Pointer to decoded key */ - hsize_t tmp_offset; /* Temporary coordinate offset, from file */ - unsigned u; /* Local index variable */ + const H5O_layout_chunk_t *layout; /* Chunk layout description */ + H5D_btree_key_t *key = (H5D_btree_key_t *) _key; /* Pointer to decoded key */ + hsize_t tmp_offset; /* Temporary coordinate offset, from file */ + unsigned u; /* Local index variable */ + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_STATIC_NOERR + FUNC_ENTER_STATIC /* check args */ HDassert(shared); @@ -684,16 +685,22 @@ H5D__btree_decode_key(const H5B_shared_t *shared, const uint8_t *raw, void *_key /* decode */ UINT32DECODE(raw, key->nbytes); UINT32DECODE(raw, key->filter_mask); - for(u = 0; u < layout->ndims; u++) { + for(u = 0; u < layout->ndims; u++) + { + if (layout->dim[u] == 0) + HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, + "chunk size must be > 0, dim = %u ", u) + /* Retrieve coordinate offset */ - UINT64DECODE(raw, tmp_offset); + UINT64DECODE(raw, tmp_offset); HDassert(0 == (tmp_offset % layout->dim[u])); /* Convert to a scaled offset */ key->scaled[u] = tmp_offset / layout->dim[u]; } /* end for */ - FUNC_LEAVE_NOAPI(SUCCEED) +done: + FUNC_LEAVE_NOAPI(ret_value) } /* end H5D__btree_decode_key() */ |