summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2004-07-28 03:22:14 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2004-07-28 03:22:14 (GMT)
commit5f8a9d5dd27481f422608adfaeb9a860b7ba0f9a (patch)
tree973f47e37e3f321bc6be2b17c25157d5ecb74238
parentd9235366bb08ae9decd6f7b9d09fd7607e988fb4 (diff)
downloadhdf5-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.txt3
-rw-r--r--src/H5TB.c6
-rw-r--r--test/dsets.c51
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
diff --git a/src/H5TB.c b/src/H5TB.c
index c223747..f26a544 100644
--- a/src/H5TB.c
+++ b/src/H5TB.c
@@ -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;