summaryrefslogtreecommitdiffstats
path: root/src/H5Dchunk.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2010-08-31 22:59:49 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2010-08-31 22:59:49 (GMT)
commit20ea68f5c4ea9d2e7708b5b4a9f6f2ba8d94e558 (patch)
tree8d855a1f506b0b94e3e8d6de6f295601681989b6 /src/H5Dchunk.c
parente65aa8c36566febd00da128e64cc90f3c8ffbc70 (diff)
downloadhdf5-20ea68f5c4ea9d2e7708b5b4a9f6f2ba8d94e558.zip
hdf5-20ea68f5c4ea9d2e7708b5b4a9f6f2ba8d94e558.tar.gz
hdf5-20ea68f5c4ea9d2e7708b5b4a9f6f2ba8d94e558.tar.bz2
[svn-r19328] Description:
Add some extra range checking for invalid chunk sizes. Tweak default chunk sizes to be zero, so that it's more likely that application developers will be forced to set them correctly. Add a few tests to verify these checks. Tested on: Mac OS X/32 10.6.4 (amazon) w/debug & production (too minor to require h5committest)
Diffstat (limited to 'src/H5Dchunk.c')
-rw-r--r--src/H5Dchunk.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c
index 88c4ab9..5768da3 100644
--- a/src/H5Dchunk.c
+++ b/src/H5Dchunk.c
@@ -384,6 +384,10 @@ H5D_chunk_construct(H5F_t UNUSED *f, H5D_t *dset)
HDassert(f);
HDassert(dset);
+ /* Check for invalid chunk dimension rank */
+ if(0 == dset->shared->layout.u.chunk.ndims)
+ HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "no chunk information set?")
+
/* Set up layout information */
if((ndims = H5S_GET_EXTENT_NDIMS(dset->shared->space)) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "unable to get rank")
@@ -406,13 +410,18 @@ H5D_chunk_construct(H5F_t UNUSED *f, H5D_t *dset)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to query maximum dimensions")
/* Sanity check dimensions */
- for(u = 0; u < dset->shared->layout.u.chunk.ndims - 1; u++)
+ for(u = 0; u < dset->shared->layout.u.chunk.ndims - 1; u++) {
+ /* Don't allow zero-sized chunk dimensions */
+ if(0 == dset->shared->layout.u.chunk.dim[u])
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "chunk size must be > 0, dim = %u ", u)
+
/*
* The chunk size of a dimension with a fixed size cannot exceed
* the maximum dimension size
*/
if(max_dim[u] != H5S_UNLIMITED && max_dim[u] < dset->shared->layout.u.chunk.dim[u])
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "chunk size must be <= maximum dimension size for fixed-sized dimensions")
+ } /* end for */
/* Compute the total size of a chunk */
/* (Use 64-bit value to ensure that we can detect >4GB chunks) */