diff options
Diffstat (limited to 'src/H5Dcompact.c')
-rw-r--r-- | src/H5Dcompact.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/H5Dcompact.c b/src/H5Dcompact.c index f0929d9..a9c0dd5 100644 --- a/src/H5Dcompact.c +++ b/src/H5Dcompact.c @@ -168,13 +168,16 @@ done: * *------------------------------------------------------------------------- */ -/* ARGSUSED */ static herr_t H5D_compact_construct(H5F_t *f, H5D_t *dset) { hssize_t stmp_size; /* Temporary holder for raw data size */ hsize_t tmp_size; /* Temporary holder for raw data size */ hsize_t max_comp_data_size; /* Max. allowed size of compact data */ + hsize_t dim[H5O_LAYOUT_NDIMS]; /* Current size of data in elements */ + hsize_t max_dim[H5O_LAYOUT_NDIMS]; /* Maximum size of data in elements */ + int ndims; /* Rank of dataspace */ + int i; /* Local index variable */ herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI_NOINIT(H5D_compact_construct) @@ -183,6 +186,13 @@ H5D_compact_construct(H5F_t *f, H5D_t *dset) HDassert(f); HDassert(dset); + /* Check for invalid dataset dimensions */ + if((ndims = H5S_get_simple_extent_dims(dset->shared->space, dim, max_dim)) < 0) + HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataspace dimensions") + for(i = 0; i < ndims; i++) + if(max_dim[i] > dim[i]) + HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "extendible compact dataset") + /* * Compact dataset is stored in dataset object header message of * layout. |