From 1f88a34fa75861d862a8186015e9238a426ea743 Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Mon, 3 Apr 2017 12:34:17 -0500 Subject: Update with checks for index bounds --- src/H5PL.c | 11 ++++++++++- test/plugin.c | 25 ++++++++++++++----------- 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 } -- cgit v0.12