diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2018-12-13 23:31:00 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2018-12-13 23:31:00 (GMT) |
commit | 247a6afb7e7fb1bc08a31cb7edbbea5f5b44eb93 (patch) | |
tree | d1333820e27591777081f167140313091b5afb73 /src | |
parent | afdf3094cc6577bacd004f2cb4b553b63bf503f7 (diff) | |
download | hdf5-247a6afb7e7fb1bc08a31cb7edbbea5f5b44eb93.zip hdf5-247a6afb7e7fb1bc08a31cb7edbbea5f5b44eb93.tar.gz hdf5-247a6afb7e7fb1bc08a31cb7edbbea5f5b44eb93.tar.bz2 |
Fix plugin code from referencing invalid key ID value, and also switch from
strtok() to strtok_r() to avoid possible interference with / to application
use of strtok().
Diffstat (limited to 'src')
-rw-r--r-- | src/H5PLint.c | 2 | ||||
-rw-r--r-- | src/H5PLpath.c | 10 | ||||
-rw-r--r-- | src/H5PLpkg.h | 2 | ||||
-rw-r--r-- | src/H5PLplugin_cache.c | 2 | ||||
-rw-r--r-- | src/H5private.h | 3 |
5 files changed, 11 insertions, 8 deletions
diff --git a/src/H5PLint.c b/src/H5PLint.c index bbe71fe..ded315a 100644 --- a/src/H5PLint.c +++ b/src/H5PLint.c @@ -262,7 +262,7 @@ H5PL_load(H5PL_type_t type, const H5PL_key_t *key) /* Set up the search parameters */ search_params.type = type; - search_params.key.id = key->id; + search_params.key = key; /* Search in the table of already loaded plugin libraries */ if(H5PL__find_plugin_in_cache(&search_params, &found, &plugin_info) < 0) diff --git a/src/H5PLpath.c b/src/H5PLpath.c index d53007b..04248b5 100644 --- a/src/H5PLpath.c +++ b/src/H5PLpath.c @@ -242,6 +242,7 @@ H5PL__create_path_table(void) * environment variable or the default. */ char *next_path = NULL; /* A path tokenized from the paths string */ + char *lasts = NULL; /* Context pointer for strtok_r() call */ herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -265,8 +266,7 @@ H5PL__create_path_table(void) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path copy") /* Separate the paths and store them */ - /* XXX: strtok() is not thread-safe */ - next_path = HDstrtok(paths, H5PL_PATH_SEPARATOR); + next_path = HDstrtok_r(paths, H5PL_PATH_SEPARATOR, &lasts); while (next_path) { /* Insert the path into the table */ @@ -274,7 +274,7 @@ H5PL__create_path_table(void) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't insert path: %s", next_path) /* Get the next path from the environment string */ - next_path = HDstrtok(NULL, H5PL_PATH_SEPARATOR); + next_path = HDstrtok_r(NULL, H5PL_PATH_SEPARATOR, &lasts); } /* end while */ done: @@ -689,7 +689,7 @@ H5PL__find_plugin_in_path(const H5PL_search_params_t *search_params, hbool_t *fo continue; /* attempt to open the dynamic library as a filter library */ - if (H5PL__open(path, search_params->type, &(search_params->key), found, plugin_info) < 0) + if (H5PL__open(path, search_params->type, search_params->key, found, plugin_info) < 0) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "search in directory failed") if (*found) HGOTO_DONE(SUCCEED) @@ -755,7 +755,7 @@ H5PL__find_plugin_in_path(const H5PL_search_params_t *search_params, hbool_t *fo continue; /* attempt to open the dynamic library as a filter library */ - if (H5PL__open(path, search_params->type, &(search_params->key), found, plugin_info) < 0) + if (H5PL__open(path, search_params->type, search_params->key, found, plugin_info) < 0) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "search in directory failed") if (*found) HGOTO_DONE(SUCCEED) diff --git a/src/H5PLpkg.h b/src/H5PLpkg.h index d60da82..c3ad8f5 100644 --- a/src/H5PLpkg.h +++ b/src/H5PLpkg.h @@ -116,7 +116,7 @@ /* Data used to search for plugins */ typedef struct H5PL_search_params_t { H5PL_type_t type; - H5PL_key_t key; + const H5PL_key_t *key; } H5PL_search_params_t; diff --git a/src/H5PLplugin_cache.c b/src/H5PLplugin_cache.c index 7fe676d..cd0b4d6 100644 --- a/src/H5PLplugin_cache.c +++ b/src/H5PLplugin_cache.c @@ -276,7 +276,7 @@ H5PL__find_plugin_in_cache(const H5PL_search_params_t *search_params, hbool_t *f for (u = 0; u < H5PL_num_plugins_g; u++) { /* If the plugin type (filter, etc.) and ID match, query the plugin for its info */ - if ((search_params->type == (H5PL_cache_g[u]).type) && (search_params->key.id == (H5PL_cache_g[u]).key.id)) { + if ((search_params->type == (H5PL_cache_g[u]).type) && (search_params->key->id == (H5PL_cache_g[u]).key.id)) { H5PL_get_plugin_info_t get_plugin_info_function; const H5Z_class2_t *filter_info; diff --git a/src/H5private.h b/src/H5private.h index b654bae..f48fa7b 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -1393,6 +1393,9 @@ typedef off_t h5_stat_size_t; #ifndef HDstrtok #define HDstrtok(X,Y) strtok(X,Y) #endif /* HDstrtok */ +#ifndef HDstrtok_r + #define HDstrtok_r(X,Y,Z) strtok_r(X,Y,Z) +#endif /* HDstrtok */ #ifndef HDstrtol #define HDstrtol(S,R,N) strtol(S,R,N) #endif /* HDstrtol */ |