summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2004-07-28 03:22:12 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2004-07-28 03:22:12 (GMT)
commitae0ae159563f4d284b4062f0c838f7c91d38f338 (patch)
tree79c055e152a7dfb1452bcd51f65e0b0a96f48a4f
parent4c7a64cc7381fe1ad8620c4def738bd7691ef490 (diff)
downloadhdf5-ae0ae159563f4d284b4062f0c838f7c91d38f338.zip
hdf5-ae0ae159563f4d284b4062f0c838f7c91d38f338.tar.gz
hdf5-ae0ae159563f4d284b4062f0c838f7c91d38f338.tar.bz2
[svn-r8962] 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.c52
3 files changed, 58 insertions, 3 deletions
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index c843dde..6e9e897 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -168,6 +168,9 @@ Bug Fixes since HDF5-1.6.0 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 f55400a..37b32eb 100644
--- a/src/H5TB.c
+++ b/src/H5TB.c
@@ -1285,11 +1285,11 @@ H5TB_end(H5TB_NODE * root, int side)
{
FUNC_ENTER_NOAPI_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 d996211..cd3cbc5 100644
--- a/test/dsets.c
+++ b/test/dsets.c
@@ -113,6 +113,10 @@ const char *FILENAME[] = {
#define NOENCODER_TEST_DATASET "noencoder_tdset.h5"
#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
@@ -3626,6 +3630,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)
@@ -3693,6 +3744,7 @@ main(void)
nerrors += test_compare_dcpl(file)<0 ?1:0;
nerrors += test_filter_delete(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;