diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2004-07-28 03:22:14 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2004-07-28 03:22:14 (GMT) |
commit | 5f8a9d5dd27481f422608adfaeb9a860b7ba0f9a (patch) | |
tree | 973f47e37e3f321bc6be2b17c25157d5ecb74238 | |
parent | d9235366bb08ae9decd6f7b9d09fd7607e988fb4 (diff) | |
download | hdf5-5f8a9d5dd27481f422608adfaeb9a860b7ba0f9a.zip hdf5-5f8a9d5dd27481f422608adfaeb9a860b7ba0f9a.tar.gz hdf5-5f8a9d5dd27481f422608adfaeb9a860b7ba0f9a.tar.bz2 |
[svn-r8963] Purpose:
Bug fix
Description:
Allow I/O on extendible chunked datasets with (currently) zero-sized
dimensions to proceed harmlessly instead of dumping core on an assertion.
Solution:
Removed assertion and added checks to avoid problem situation in H5TB_end
Platforms tested:
FreeBSD 4.10 (sleipnir) w/ & w/o parallel
Too minor to require h5committest
-rw-r--r-- | release_docs/RELEASE.txt | 3 | ||||
-rw-r--r-- | src/H5TB.c | 6 | ||||
-rw-r--r-- | test/dsets.c | 51 |
3 files changed, 57 insertions, 3 deletions
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 22eae7a..d7c0545 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -101,6 +101,9 @@ Bug Fixes since HDF5-1.6.2 release Library ------- + - Fixed bug where I/O to an extendible chunked dataset with zero-sized + dimensions would cause library to fail an assertion. + QAK - 2004/07/27 - Fixed bug where chunked datasets which have filters defined, allocation time set to "late" and whose chunks don't align with the dataspace bounds could have incorrect data stored when @@ -1300,11 +1300,11 @@ H5TB_end(H5TB_NODE * root, int side) { FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5TB_end); - assert(root); assert(side==LEFT || side==RIGHT); - while (HasChild(root, side)) - root = root->link[side]; + if(root) + while (HasChild(root, side)) + root = root->link[side]; FUNC_LEAVE_NOAPI(root); } /* end H5TB_end() */ diff --git a/test/dsets.c b/test/dsets.c index 8d819f3..5f0e708 100644 --- a/test/dsets.c +++ b/test/dsets.c @@ -113,6 +113,9 @@ const char *FILENAME[] = { #define NOENCODER_SZIP_DATASET "noencoder_szip_dset.h5" #define NOENCODER_SZIP_SHUFF_FLETCH_DATASET "noencoder_szip_shuffle_fletcher_dset.h5" +/* Names for zero-dim test */ +#define ZERODIM_DATASET "zerodim" + /* Shared global arrays */ #define DSET_DIM1 100 #define DSET_DIM2 200 @@ -3599,6 +3602,53 @@ error: /*------------------------------------------------------------------------- + * Function: test_zero_dims + * + * Purpose: Tests read/writes to zero-sized extendible datasets + * + * Return: Success: 0 + * Failure: -1 + * + * Programmer: Quincey Koziol + * Tuesday, July 27, 2004 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +test_zero_dims(hid_t file) +{ + hid_t s=-1, d=-1, dcpl=-1; + hsize_t dsize=0, dmax=H5S_UNLIMITED, csize=5; + + TESTING("I/O on datasets with zero-sized dims"); + + if((s = H5Screate_simple(1, &dsize, &dmax))<0) TEST_ERROR; + if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR; + if(H5Pset_chunk(dcpl, 1, &csize)<0) TEST_ERROR; + if((d = H5Dcreate(file, ZERODIM_DATASET, H5T_NATIVE_INT, s, dcpl))<0) TEST_ERROR; + + if(H5Dwrite(d, H5T_NATIVE_INT, s, s, H5P_DEFAULT, (void*)911)<0) TEST_ERROR; + + if(H5Pclose(dcpl)<0) TEST_ERROR; + if(H5Sclose(s)<0) TEST_ERROR; + if(H5Dclose(d)<0) TEST_ERROR; + + PASSED(); + return 0; + +error: + H5E_BEGIN_TRY { + H5Pclose(dcpl); + H5Dclose(d); + H5Sclose(s); + } H5E_END_TRY; + return -1; +} /* end test_zero_dims() */ + + +/*------------------------------------------------------------------------- * Function: main * * Purpose: Tests the dataset interface (H5D) @@ -3667,6 +3717,7 @@ main(void) nerrors += test_can_apply_szip(file)<0 ?1:0; nerrors += test_compare_dcpl(file)<0 ?1:0; nerrors += test_filters_endianess()<0 ?1:0; + nerrors += test_zero_dims(file)<0 ?1:0; if (H5Fclose(file)<0) goto error; if (nerrors) goto error; |