summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2010-08-31 23:10:43 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2010-08-31 23:10:43 (GMT)
commit17f53bf1f35c9cc83f7d778a9e4d613fd9ce2278 (patch)
tree9d4b3d2492ee781b39072ea11dacb9018c8325ab /src
parentc9cf76d5f9abff08e2488b79825551e99adecf42 (diff)
downloadhdf5-17f53bf1f35c9cc83f7d778a9e4d613fd9ce2278.zip
hdf5-17f53bf1f35c9cc83f7d778a9e4d613fd9ce2278.tar.gz
hdf5-17f53bf1f35c9cc83f7d778a9e4d613fd9ce2278.tar.bz2
[svn-r19329] Description:
Bring r19328 from trunk to 1.8 branch: 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')
-rw-r--r--src/H5Dchunk.c11
-rw-r--r--src/H5Pdcpl.c2
2 files changed, 11 insertions, 2 deletions
diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c
index c34807f..3a24ed3 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) */
diff --git a/src/H5Pdcpl.c b/src/H5Pdcpl.c
index 6fe1b39..6ceed64 100644
--- a/src/H5Pdcpl.c
+++ b/src/H5Pdcpl.c
@@ -53,7 +53,7 @@
#define H5D_DEF_STORAGE_COMPACT_INIT {(hbool_t)FALSE, (size_t)0, NULL}
#define H5D_DEF_STORAGE_CONTIG_INIT {HADDR_UNDEF, (hsize_t)0}
#define H5D_DEF_STORAGE_CHUNK_INIT {H5D_CHUNK_BTREE, HADDR_UNDEF, NULL, {{NULL}}}
-#define H5D_DEF_LAYOUT_CHUNK_INIT {(unsigned)1, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, (uint32_t)0, (hsize_t)0, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}
+#define H5D_DEF_LAYOUT_CHUNK_INIT {(unsigned)0, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, (uint32_t)0, (hsize_t)0, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}
#ifdef H5_HAVE_C99_DESIGNATED_INITIALIZER
#define H5D_DEF_STORAGE_COMPACT {H5D_COMPACT, { .compact = H5D_DEF_STORAGE_COMPACT_INIT }}
#define H5D_DEF_STORAGE_CONTIG {H5D_CONTIGUOUS, { .contig = H5D_DEF_STORAGE_CONTIG_INIT }}