summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/H5Dio.c7
-rw-r--r--test/tselect.c7
2 files changed, 11 insertions, 3 deletions
diff --git a/src/H5Dio.c b/src/H5Dio.c
index b59a11f..40b1700 100644
--- a/src/H5Dio.c
+++ b/src/H5Dio.c
@@ -1132,8 +1132,8 @@ H5D_contig_read(hsize_t nelmts, H5D_t *dataset,
/* Sanity check dataset, then read it */
assert(((dataset->layout.type==H5D_CONTIGUOUS && H5F_addr_defined(dataset->layout.u.contig.addr))
|| (dataset->layout.type==H5D_CHUNKED && H5F_addr_defined(dataset->layout.u.chunk.addr)))
- || dataset->efl.nused>0 ||
- dataset->layout.type==H5D_COMPACT);
+ || dataset->efl.nused>0 || 0 == nelmts
+ || dataset->layout.type==H5D_COMPACT);
H5_CHECK_OVERFLOW(nelmts,hsize_t,size_t);
status = (sconv->read)(dataset->ent.file, dxpl_cache, dxpl_id,
dataset, (H5D_storage_t *)&(dataset->efl),
@@ -1622,7 +1622,8 @@ H5D_chunk_read(hsize_t nelmts, H5D_t *dataset,
/* Sanity check dataset, then read it */
assert(((dataset->layout.type==H5D_CONTIGUOUS && H5F_addr_defined(dataset->layout.u.contig.addr))
|| (dataset->layout.type==H5D_CHUNKED && H5F_addr_defined(dataset->layout.u.chunk.addr)))
- || dataset->efl.nused>0 || dataset->layout.type==H5D_COMPACT);
+ || dataset->efl.nused>0 || 0 == nelmts
+ || dataset->layout.type==H5D_COMPACT);
/* Get first node in chunk tree */
chunk_node=H5TB_first(fm.fsel->root);
diff --git a/test/tselect.c b/test/tselect.c
index c74b90a..cdec45e 100644
--- a/test/tselect.c
+++ b/test/tselect.c
@@ -5023,6 +5023,7 @@ test_select_none(void)
hsize_t dims1[] = {SPACE7_DIM1, SPACE7_DIM2};
hsize_t dims2[] = {SPACE7_DIM1, SPACE7_DIM2};
uint8_t *wbuf, /* buffer to write to disk */
+ *rbuf, /* buffer to read from disk */
*tbuf; /* temporary buffer pointer */
int i,j; /* Counters */
herr_t ret; /* Generic return value */
@@ -5032,6 +5033,7 @@ test_select_none(void)
/* Allocate write & read buffers */
wbuf=malloc(sizeof(uint8_t)*SPACE7_DIM1*SPACE7_DIM2);
+ rbuf=malloc(sizeof(uint8_t)*SPACE7_DIM1*SPACE7_DIM2);
/* Initialize write buffer */
for(i=0, tbuf=wbuf; i<SPACE7_DIM1; i++)
@@ -5061,6 +5063,10 @@ test_select_none(void)
ret = H5Sselect_none(sid2);
CHECK(ret, FAIL, "H5Sselect_none");
+ /* Attempt to read "nothing" from disk (before space is allocated) */
+ ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,rbuf);
+ CHECK(ret, FAIL, "H5Dread");
+
/* Write "nothing" to disk */
ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf);
CHECK(ret, FAIL, "H5Dwrite");
@@ -5095,6 +5101,7 @@ test_select_none(void)
/* Free memory buffers */
free(wbuf);
+ free(rbuf);
} /* test_select_none() */
/****************************************************************