summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllen Byrne <byrn@hdfgroup.org>2017-04-03 17:34:17 (GMT)
committerAllen Byrne <byrn@hdfgroup.org>2017-04-03 17:34:17 (GMT)
commit1f88a34fa75861d862a8186015e9238a426ea743 (patch)
treea0f2768b17f30876c30d12783a4c0a08d10a27f7
parentd86d708aea48a4ca3d569c1c00c7bfa45e54e6dd (diff)
downloadhdf5-1f88a34fa75861d862a8186015e9238a426ea743.zip
hdf5-1f88a34fa75861d862a8186015e9238a426ea743.tar.gz
hdf5-1f88a34fa75861d862a8186015e9238a426ea743.tar.bz2
Update with checks for index bounds
-rw-r--r--src/H5PL.c11
-rw-r--r--test/plugin.c25
2 files changed, 24 insertions, 12 deletions
diff --git a/src/H5PL.c b/src/H5PL.c
index fe7b26b..bfa3ace 100644
--- a/src/H5PL.c
+++ b/src/H5PL.c
@@ -494,6 +494,8 @@ H5PLreplace(const char* plugin_path, unsigned int index)
FUNC_ENTER_API(FAIL)
if(NULL == plugin_path)
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "no path provided")
+ if(index >= H5PL_MAX_PATH_NUM)
+ HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "index path out of bounds for table")
if(NULL == (dl_path = H5MM_strdup(plugin_path)))
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path")
@@ -529,6 +531,8 @@ H5PLinsert(const char* plugin_path, unsigned int index)
HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "too many directories in path for table")
if(NULL == plugin_path)
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "no path provided")
+ if(index >= H5PL_MAX_PATH_NUM)
+ HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "index path out of bounds for table")
if(NULL == (dl_path = H5MM_strdup(plugin_path)))
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path")
@@ -562,12 +566,15 @@ H5PLremove(unsigned int index)
FUNC_ENTER_API(FAIL)
if(H5PL_num_paths_g == 0)
HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "no directories in table")
+ if(index >= H5PL_MAX_PATH_NUM)
+ HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "index path out of bounds for table")
if(NULL == H5PL_path_table_g[index])
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "no directory path at index")
H5PL_path_table_g[index] = (char *)H5MM_xfree(H5PL_path_table_g[index]);
+
+ H5PL_num_paths_g--;
for(plindex = index; plindex < (unsigned int)H5PL_num_paths_g; plindex++)
H5PL_path_table_g[plindex] = H5PL_path_table_g[plindex + 1];
- H5PL_num_paths_g--;
H5PL_path_table_g[H5PL_num_paths_g] = NULL;
done:
@@ -603,6 +610,8 @@ H5PLget(unsigned int index, char *pathname/*out*/, size_t size)
FUNC_ENTER_API(FAIL)
if(H5PL_num_paths_g == 0)
HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "no directories in table")
+ if(index >= H5PL_MAX_PATH_NUM)
+ HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "index path out of bounds for table")
if(NULL == (dl_path = H5PL_path_table_g[index]))
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "no directory path at index")
len = HDstrlen(dl_path);
diff --git a/test/plugin.c b/test/plugin.c
index fca8916..6c14062 100644
--- a/test/plugin.c
+++ b/test/plugin.c
@@ -750,6 +750,8 @@ test_filter_path_apis(void)
HDputs("Testing access to the filter path table");
+ if(H5Zfilter_avail(H5Z_FILTER_DYNLIB1) != TRUE) TEST_ERROR
+
ndx = H5PLsize();
TESTING(" remove");
@@ -764,7 +766,7 @@ test_filter_path_apis(void)
if (H5PLsize() > 0) TEST_ERROR
PASSED();
- TESTING(" remove (exceed)");
+ TESTING(" remove (exceed min)");
/* Exceed the min path removal */
H5E_BEGIN_TRY {
ret = H5PLremove(0);
@@ -795,6 +797,7 @@ test_filter_path_apis(void)
if (ret >= 0)
TEST_ERROR
+ TESTING(" remove (exceed max)");
/* Exceed the max path removal */
H5E_BEGIN_TRY {
ret = H5PLremove(H5PL_MAX_PATH_NUM);
@@ -815,7 +818,7 @@ test_filter_path_apis(void)
HDfprintf(stderr," get 0 len: %d : %s\n", pathlen, pathname);
TEST_ERROR
}
- if (strcmp(pathname, "a_path_0") != 0) {
+ if (HDstrcmp(pathname, "a_path_0") != 0) {
HDfprintf(stderr," get 0: %s\n", pathname);
TEST_ERROR
}
@@ -824,14 +827,14 @@ test_filter_path_apis(void)
TESTING(" get (bounds)");
if ((pathlen = H5PLget(1, pathname, 256)) <= 0)
TEST_ERROR
- if (strcmp(pathname, "a_path_1") != 0) {
+ if (HDstrcmp(pathname, "a_path_1") != 0) {
HDfprintf(stderr," get 1: %s\n", pathname);
TEST_ERROR
}
if ((pathlen = H5PLget(H5PL_MAX_PATH_NUM - 1, pathname, 256)) <= 0)
TEST_ERROR
HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM - 1);
- if (strcmp(pathname, tempname) != 0) {
+ if (HDstrcmp(pathname, tempname) != 0) {
HDfprintf(stderr," get %d: %s\n", H5PL_MAX_PATH_NUM - 1, pathname);
TEST_ERROR
}
@@ -852,7 +855,7 @@ test_filter_path_apis(void)
/* Verify that the entries were moved */
if ((pathlen = H5PLget(8, pathname, 256)) <= 0)
TEST_ERROR
- if (strcmp(pathname, "a_path_9") != 0) {
+ if (HDstrcmp(pathname, "a_path_9") != 0) {
HDfprintf(stderr," get 8: %s\n", pathname);
TEST_ERROR
}
@@ -875,14 +878,14 @@ test_filter_path_apis(void)
/* Verify that the entries were moved */
if (H5PLget(8, pathname, 256) <= 0)
TEST_ERROR
- if (strcmp(pathname, "a_path_7") != 0) {
+ if (HDstrcmp(pathname, "a_path_7") != 0) {
HDfprintf(stderr," get 8: %s\n", pathname);
TEST_ERROR
}
if (H5PLget(0, pathname, 256) <= 0)
TEST_ERROR
HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM + 1);
- if (strcmp(pathname, tempname) != 0) {
+ if (HDstrcmp(pathname, tempname) != 0) {
HDfprintf(stderr," get 0: %s\n", pathname);
TEST_ERROR
}
@@ -913,13 +916,13 @@ test_filter_path_apis(void)
if (H5PLget(0, pathname, 256) <= 0)
TEST_ERROR
HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM + 1);
- if (strcmp(pathname, tempname) != 0) {
+ if (HDstrcmp(pathname, tempname) != 0) {
HDfprintf(stderr," get 0: %s\n", pathname);
TEST_ERROR
}
if (H5PLget(2, pathname, 256) <= 0)
TEST_ERROR
- if (strcmp(pathname, "a_path_1") != 0) {
+ if (HDstrcmp(pathname, "a_path_1") != 0) {
HDfprintf(stderr," get 2: %s\n", pathname);
TEST_ERROR
}
@@ -932,7 +935,7 @@ test_filter_path_apis(void)
/* Verify that the entries were moved */
if (H5PLget(4, pathname, 256) <= 0)
TEST_ERROR
- if (strcmp(pathname, "a_path_4") != 0) {
+ if (HDstrcmp(pathname, "a_path_4") != 0) {
HDfprintf(stderr," get 4: %s\n", pathname);
TEST_ERROR
}
@@ -952,7 +955,7 @@ test_filter_path_apis(void)
/* Verify that the entries were moved */
if (H5PLget(4, pathname, 256) <= 0)
TEST_ERROR
- if (strcmp(pathname, "a_path_2") != 0){
+ if (HDstrcmp(pathname, "a_path_2") != 0){
HDfprintf(stderr," get 4: %s\n", pathname);
TEST_ERROR
}