mirror of
https://github.com/HDFGroup/hdf5.git
synced 2026-09-25 04:09:44 +03:00
[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:
@@ -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
@@ -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() */
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user