[svn-r27605] Fix potential memory error when using a dataspace that was created with

H5Screate and had its extent set by H5Sextent_copy.

Tested: jam, ostrich (h5committest)
This commit is contained in:
Neil Fortner
2015-08-28 14:43:03 -05:00
parent 1252bc4e66
commit 1847391fc5
2 changed files with 44 additions and 1 deletions
+1 -1
View File
@@ -190,7 +190,7 @@ H5S_create(H5S_class_t type)
FUNC_ENTER_NOAPI(NULL)
/* Create a new dataspace */
if(NULL == (new_ds = H5FL_MALLOC(H5S_t)))
if(NULL == (new_ds = H5FL_CALLOC(H5S_t)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
/* Initialize default dataspace state */
+43
View File
@@ -2324,6 +2324,48 @@ test_h5s_extent_copy(void)
CHECK(ret, FAIL, "H5Sclose");
} /* test_h5s_extent_copy() */
/****************************************************************
**
** test_h5s_bug1(): Test Creating dataspace with H5Screate then
* setting extent with H5Sextent_copy.
**
****************************************************************/
static void
test_h5s_bug1(void)
{
hid_t space1; /* Dataspace to copy extent to */
hid_t space2; /* Scalar dataspace */
hsize_t dims[2] = {10, 10}; /* Dimensions */
hsize_t start[2] = {0, 0}; /* Hyperslab start */
htri_t select_valid; /* Whether the dataspace selection is valid */
herr_t ret; /* Generic error return */
/* Create dataspaces */
space1 = H5Screate(H5S_SIMPLE);
CHECK(space1, FAIL, "H5Screate");
space2 = H5Screate_simple(2, dims, NULL);
CHECK(space2, FAIL, "H5Screate");
/* Copy extent to space1 */
ret = H5Sextent_copy(space1, space2);
CHECK(ret, FAIL, "H5Sextent_copy");
/* Select hyperslab in space1 containing entire extent */
ret = H5Sselect_hyperslab(space1, H5S_SELECT_SET, start, NULL, dims, NULL);
CHECK(ret, FAIL, "H5Sselect_hyperslab");
/* Check that space1's selection is valid */
select_valid = H5Sselect_valid(space1);
CHECK(select_valid, FAIL, "H5Sselect_valid");
VERIFY(select_valid, TRUE, "H5Sselect_valid result");
/* Close dataspaces */
ret = H5Sclose(space1);
CHECK(ret, FAIL, "H5Sclose");
ret = H5Sclose(space2);
CHECK(ret, FAIL, "H5Sclose");
} /* test_h5s_bug1() */
/****************************************************************
**
** test_h5s(): Main H5S (dataspace) testing routine.
@@ -2350,6 +2392,7 @@ test_h5s(void)
test_h5s_extent_equal(); /* Test extent comparison code */
test_h5s_extent_copy(); /* Test extent copy code */
test_h5s_bug1(); /* Test bug in offset initialization */
} /* test_h5s() */