From a666c45e280e4f6342002a5ec9c0b7bf832a191d Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Mon, 19 Oct 2026 00:54:19 -0400 Subject: [PATCH 1/3] Adds check for H5I_get_type() returned value The returned value from H5I_get_type() is not checked in many functions in this kind of statement. This can potentially cause issues further down if one of those H5I_get_type() fails. Fixes GH-4764 --- src/H5A.c | 186 ++++++++++++++++++++++++++++++------------------ src/H5Adeprec.c | 57 +++++++++------ src/H5D.c | 10 ++- src/H5Ddeprec.c | 10 +-- src/H5G.c | 14 ++-- src/H5Gdeprec.c | 29 +++++--- src/H5I.c | 11 ++- src/H5L.c | 21 ++++-- src/H5Ldeprec.c | 10 +-- src/H5M.c | 23 ++++-- src/H5O.c | 74 ++++++++++++------- src/H5Odeprec.c | 68 ++++++++++-------- src/H5Oflush.c | 3 +- src/H5Tcommit.c | 7 +- src/H5Tdeprec.c | 10 +-- src/H5VLint.c | 31 ++++---- 16 files changed, 357 insertions(+), 207 deletions(-) diff --git a/src/H5A.c b/src/H5A.c index 028e473f1079..928a253e2208 100644 --- a/src/H5A.c +++ b/src/H5A.c @@ -151,7 +151,8 @@ static hid_t H5A__create_api_common(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t space_id, hid_t acpl_id, hid_t aapl_id, void **token_ptr, H5VL_object_t **_vol_obj_ptr) { - H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ H5VL_object_t **vol_obj_ptr = (_vol_obj_ptr ? _vol_obj_ptr : &tmp_vol_obj); /* Ptr to object ptr for loc_id */ H5VL_loc_params_t loc_params; /* Location parameters for object access */ @@ -160,7 +161,9 @@ H5A__create_api_common(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); if (!attr_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "attr_name parameter cannot be NULL"); @@ -294,7 +297,8 @@ H5A__create_by_name_api_common(hid_t loc_id, const char *obj_name, const char *a hid_t space_id, hid_t acpl_id, hid_t aapl_id, hid_t lapl_id, void **token_ptr, H5VL_object_t **_vol_obj_ptr) { - H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ H5VL_object_t **vol_obj_ptr = (_vol_obj_ptr ? _vol_obj_ptr : &tmp_vol_obj); /* Ptr to object ptr for loc_id */ H5VL_loc_params_t loc_params; /* Location parameters for object access */ @@ -303,7 +307,9 @@ H5A__create_by_name_api_common(hid_t loc_id, const char *obj_name, const char *a FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); if (!attr_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "attr_name parameter cannot be NULL"); @@ -480,7 +486,8 @@ static hid_t H5A__open_api_common(hid_t loc_id, const char *attr_name, hid_t aapl_id, void **token_ptr, H5VL_object_t **_vol_obj_ptr) { - H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ H5VL_object_t **vol_obj_ptr = (_vol_obj_ptr ? _vol_obj_ptr : &tmp_vol_obj); /* Ptr to object ptr for loc_id */ H5VL_loc_params_t loc_params; /* Location parameters for object access */ @@ -489,7 +496,9 @@ H5A__open_api_common(hid_t loc_id, const char *attr_name, hid_t aapl_id, void ** FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); if (!attr_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "name parameter cannot be NULL"); @@ -600,7 +609,8 @@ static hid_t H5A__open_by_name_api_common(hid_t loc_id, const char *obj_name, const char *attr_name, hid_t aapl_id, hid_t lapl_id, void **token_ptr, H5VL_object_t **_vol_obj_ptr) { - H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ H5VL_object_t **vol_obj_ptr = (_vol_obj_ptr ? _vol_obj_ptr : &tmp_vol_obj); /* Ptr to object ptr for loc_id */ H5VL_loc_params_t loc_params; /* Location parameters for object access */ @@ -609,7 +619,9 @@ H5A__open_by_name_api_common(hid_t loc_id, const char *obj_name, const char *att FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); if (!attr_name || !*attr_name) @@ -729,7 +741,8 @@ H5A__open_by_idx_api_common(hid_t loc_id, const char *obj_name, H5_index_t idx_t hsize_t n, hid_t aapl_id, hid_t lapl_id, void **token_ptr, H5VL_object_t **_vol_obj_ptr) { - H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ H5VL_object_t **vol_obj_ptr = (_vol_obj_ptr ? _vol_obj_ptr : &tmp_vol_obj); /* Ptr to object ptr for loc_id */ H5VL_loc_params_t loc_params; /* Location parameters for object access */ @@ -738,7 +751,9 @@ H5A__open_by_idx_api_common(hid_t loc_id, const char *obj_name, H5_index_t idx_t FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); if (!obj_name || !*obj_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "no object name"); @@ -1238,7 +1253,7 @@ H5Aget_name(hid_t attr_id, size_t buf_size, char *buf /*out*/) if (buf && buf_size == 0) buf = NULL; - /* check arguments */ + /* Check arguments */ if (NULL == (vol_obj = H5VL_vol_object_verify(attr_id, H5I_ATTR))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, (-1), "not an attribute"); if (!buf && buf_size) @@ -1247,7 +1262,7 @@ H5Aget_name(hid_t attr_id, size_t buf_size, char *buf /*out*/) /* Set up VOL callback arguments */ vol_cb_args.op_type = H5VL_ATTR_GET_NAME; vol_cb_args.args.get_name.loc_params.type = H5VL_OBJECT_BY_SELF; - vol_cb_args.args.get_name.loc_params.obj_type = H5I_get_type(attr_id); + vol_cb_args.args.get_name.loc_params.obj_type = H5I_ATTR; vol_cb_args.args.get_name.buf_size = buf_size; vol_cb_args.args.get_name.buf = buf; vol_cb_args.args.get_name.attr_name_len = &attr_name_len; @@ -1293,10 +1308,11 @@ ssize_t H5Aget_name_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_iter_order_t order, hsize_t n, char *name /*out*/, size_t size, hid_t lapl_id) { - H5VL_object_t *vol_obj = NULL; /* Attribute object for ID */ - H5VL_attr_get_args_t vol_cb_args; /* Arguments to VOL callback */ - size_t attr_name_len = 0; /* Length of attribute name */ - ssize_t ret_value; /* Return value */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Attribute object for ID */ + H5VL_attr_get_args_t vol_cb_args; /* Arguments to VOL callback */ + size_t attr_name_len = 0; /* Length of attribute name */ + ssize_t ret_value; /* Return value */ FUNC_ENTER_API(FAIL) @@ -1305,7 +1321,9 @@ H5Aget_name_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_i name = NULL; /* Check args */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); if (!obj_name || !*obj_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name"); @@ -1332,7 +1350,7 @@ H5Aget_name_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_i vol_cb_args.args.get_name.loc_params.loc_data.loc_by_idx.order = order; vol_cb_args.args.get_name.loc_params.loc_data.loc_by_idx.n = n; vol_cb_args.args.get_name.loc_params.loc_data.loc_by_idx.lapl_id = lapl_id; - vol_cb_args.args.get_name.loc_params.obj_type = H5I_get_type(loc_id); + vol_cb_args.args.get_name.loc_params.obj_type = vol_obj_type; vol_cb_args.args.get_name.buf_size = size; vol_cb_args.args.get_name.buf = name; vol_cb_args.args.get_name.attr_name_len = &attr_name_len; @@ -1419,7 +1437,7 @@ H5Aget_info(hid_t attr_id, H5A_info_t *ainfo /*out*/) /* Set up VOL callback arguments */ vol_cb_args.op_type = H5VL_ATTR_GET_INFO; vol_cb_args.args.get_info.loc_params.type = H5VL_OBJECT_BY_SELF; - vol_cb_args.args.get_info.loc_params.obj_type = H5I_get_type(attr_id); + vol_cb_args.args.get_info.loc_params.obj_type = H5I_ATTR; vol_cb_args.args.get_info.attr_name = NULL; vol_cb_args.args.get_info.ainfo = ainfo; @@ -1445,14 +1463,17 @@ herr_t H5Aget_info_by_name(hid_t loc_id, const char *obj_name, const char *attr_name, H5A_info_t *ainfo /*out*/, hid_t lapl_id) { - H5VL_object_t *vol_obj = NULL; /* Attribute object for ID */ - H5VL_attr_get_args_t vol_cb_args; /* Arguments to VOL callback */ - herr_t ret_value = SUCCEED; /* Return value */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Attribute object for ID */ + H5VL_attr_get_args_t vol_cb_args; /* Arguments to VOL callback */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) /* Check args */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); if (!obj_name || !*obj_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no object name"); @@ -1474,7 +1495,7 @@ H5Aget_info_by_name(hid_t loc_id, const char *obj_name, const char *attr_name, H vol_cb_args.args.get_info.loc_params.type = H5VL_OBJECT_BY_NAME; vol_cb_args.args.get_info.loc_params.loc_data.loc_by_name.name = obj_name; vol_cb_args.args.get_info.loc_params.loc_data.loc_by_name.lapl_id = lapl_id; - vol_cb_args.args.get_info.loc_params.obj_type = H5I_get_type(loc_id); + vol_cb_args.args.get_info.loc_params.obj_type = vol_obj_type; vol_cb_args.args.get_info.attr_name = attr_name; vol_cb_args.args.get_info.ainfo = ainfo; @@ -1501,14 +1522,17 @@ herr_t H5Aget_info_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_iter_order_t order, hsize_t n, H5A_info_t *ainfo /*out*/, hid_t lapl_id) { - H5VL_object_t *vol_obj = NULL; /* Attribute object for ID */ - H5VL_attr_get_args_t vol_cb_args; /* Arguments to VOL callback */ - herr_t ret_value = SUCCEED; /* Return value */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Attribute object for ID */ + H5VL_attr_get_args_t vol_cb_args; /* Arguments to VOL callback */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) /* Check args */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); if (!obj_name || !*obj_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name"); @@ -1535,7 +1559,7 @@ H5Aget_info_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_i vol_cb_args.args.get_info.loc_params.loc_data.loc_by_idx.order = order; vol_cb_args.args.get_info.loc_params.loc_data.loc_by_idx.n = n; vol_cb_args.args.get_info.loc_params.loc_data.loc_by_idx.lapl_id = lapl_id; - vol_cb_args.args.get_info.loc_params.obj_type = H5I_get_type(loc_id); + vol_cb_args.args.get_info.loc_params.obj_type = vol_obj_type; vol_cb_args.args.get_info.attr_name = NULL; vol_cb_args.args.get_info.ainfo = ainfo; @@ -1600,7 +1624,8 @@ static herr_t H5A__rename_api_common(hid_t loc_id, const char *old_name, const char *new_name, void **token_ptr, H5VL_object_t **_vol_obj_ptr) { - H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ H5VL_object_t **vol_obj_ptr = (_vol_obj_ptr ? _vol_obj_ptr : &tmp_vol_obj); /* Ptr to object ptr for loc_id */ H5VL_loc_params_t loc_params; /* Location parameters for object access */ @@ -1609,7 +1634,9 @@ H5A__rename_api_common(hid_t loc_id, const char *old_name, const char *new_name, FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); if (!old_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "old attribute name cannot be NULL"); @@ -1708,7 +1735,8 @@ static herr_t H5A__rename_by_name_api_common(hid_t loc_id, const char *obj_name, const char *old_name, const char *new_name, hid_t lapl_id, void **token_ptr, H5VL_object_t **_vol_obj_ptr) { - H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ H5VL_object_t **vol_obj_ptr = (_vol_obj_ptr ? _vol_obj_ptr : &tmp_vol_obj); /* Ptr to object ptr for loc_id */ H5VL_loc_params_t loc_params; /* Location parameters for object access */ @@ -1717,9 +1745,10 @@ H5A__rename_by_name_api_common(hid_t loc_id, const char *obj_name, const char *o FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); - if (!old_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "old attribute name cannot be NULL"); if (!*old_name) @@ -1855,15 +1884,18 @@ herr_t H5Aiterate2(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order, hsize_t *idx /*in,out */, H5A_operator2_t op, void *op_data) { - H5VL_object_t *vol_obj = NULL; /* Object for loc_id */ - H5VL_loc_params_t loc_params; /* Location parameters for object access */ - H5VL_attr_specific_args_t vol_cb_args; /* Arguments to VOL callback */ - herr_t ret_value; /* Return value */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Object for loc_id */ + H5VL_loc_params_t loc_params; /* Location parameters for object access */ + H5VL_attr_specific_args_t vol_cb_args; /* Arguments to VOL callback */ + herr_t ret_value; /* Return value */ FUNC_ENTER_API(FAIL) /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); if (idx_type <= H5_INDEX_UNKNOWN || idx_type >= H5_INDEX_N) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid index type specified"); @@ -1878,7 +1910,7 @@ H5Aiterate2(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order, hsize_t *i /* Set the location access parameters */ loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.obj_type = vol_obj_type; /* Set up VOL callback arguments */ vol_cb_args.op_type = H5VL_ATTR_ITER; @@ -1944,15 +1976,18 @@ herr_t H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_iter_order_t order, hsize_t *idx /*in,out */, H5A_operator2_t op, void *op_data, hid_t lapl_id) { - H5VL_object_t *vol_obj = NULL; /* Object for loc_id */ - H5VL_loc_params_t loc_params; /* Location parameters for object access */ - H5VL_attr_specific_args_t vol_cb_args; /* Arguments to VOL callback */ - herr_t ret_value = SUCCEED; /* Return value */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Object for loc_id */ + H5VL_loc_params_t loc_params; /* Location parameters for object access */ + H5VL_attr_specific_args_t vol_cb_args; /* Arguments to VOL callback */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); if (!obj_name || !*obj_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no object name"); @@ -1973,7 +2008,7 @@ H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_i /* Set the location access parameters */ loc_params.type = H5VL_OBJECT_BY_NAME; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.obj_type = vol_obj_type; loc_params.loc_data.loc_by_name.name = obj_name; loc_params.loc_data.loc_by_name.lapl_id = lapl_id; @@ -2011,15 +2046,18 @@ H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_i herr_t H5Adelete(hid_t loc_id, const char *name) { - H5VL_object_t *vol_obj = NULL; /* Object for loc_id */ - H5VL_loc_params_t loc_params; /* Location parameters for object access */ - H5VL_attr_specific_args_t vol_cb_args; /* Arguments to VOL callback */ - herr_t ret_value = SUCCEED; /* Return value */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Object for loc_id */ + H5VL_loc_params_t loc_params; /* Location parameters for object access */ + H5VL_attr_specific_args_t vol_cb_args; /* Arguments to VOL callback */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); if (!name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "name parameter cannot be NULL"); @@ -2036,7 +2074,7 @@ H5Adelete(hid_t loc_id, const char *name) /* Set the location access parameters */ loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.obj_type = vol_obj_type; /* Set up VOL callback arguments */ vol_cb_args.op_type = H5VL_ATTR_DELETE; @@ -2069,15 +2107,18 @@ H5Adelete(hid_t loc_id, const char *name) herr_t H5Adelete_by_name(hid_t loc_id, const char *obj_name, const char *attr_name, hid_t lapl_id) { - H5VL_object_t *vol_obj = NULL; /* Object for loc_id */ - H5VL_loc_params_t loc_params; /* Location parameters for object access */ - H5VL_attr_specific_args_t vol_cb_args; /* Arguments to VOL callback */ - herr_t ret_value = SUCCEED; /* Return value */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Object for loc_id */ + H5VL_loc_params_t loc_params; /* Location parameters for object access */ + H5VL_attr_specific_args_t vol_cb_args; /* Arguments to VOL callback */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); if (!obj_name || !*obj_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no object name"); @@ -2096,7 +2137,7 @@ H5Adelete_by_name(hid_t loc_id, const char *obj_name, const char *attr_name, hid loc_params.type = H5VL_OBJECT_BY_NAME; loc_params.loc_data.loc_by_name.name = obj_name; loc_params.loc_data.loc_by_name.lapl_id = lapl_id; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.obj_type = vol_obj_type; /* Set up VOL callback arguments */ vol_cb_args.op_type = H5VL_ATTR_DELETE; @@ -2138,15 +2179,18 @@ herr_t H5Adelete_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t lapl_id) { - H5VL_object_t *vol_obj = NULL; /* Object for loc_id */ - H5VL_loc_params_t loc_params; /* Location parameters for object access */ - H5VL_attr_specific_args_t vol_cb_args; /* Arguments to VOL callback */ - herr_t ret_value = SUCCEED; /* Return value */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Object for loc_id */ + H5VL_loc_params_t loc_params; /* Location parameters for object access */ + H5VL_attr_specific_args_t vol_cb_args; /* Arguments to VOL callback */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) /* check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); if (!obj_name || !*obj_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no object name"); @@ -2167,7 +2211,7 @@ H5Adelete_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_ite loc_params.type = H5VL_OBJECT_BY_NAME; loc_params.loc_data.loc_by_name.name = obj_name; loc_params.loc_data.loc_by_name.lapl_id = lapl_id; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.obj_type = vol_obj_type; /* Set up VOL callback arguments */ vol_cb_args.op_type = H5VL_ATTR_DELETE_BY_IDX; @@ -2325,7 +2369,8 @@ static herr_t H5A__exists_api_common(hid_t obj_id, const char *attr_name, bool *attr_exists, void **token_ptr, H5VL_object_t **_vol_obj_ptr) { - H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ H5VL_object_t **vol_obj_ptr = (_vol_obj_ptr ? _vol_obj_ptr : &tmp_vol_obj); /* Ptr to object ptr for loc_id */ H5VL_loc_params_t loc_params; /* Location parameters for object access */ @@ -2334,7 +2379,9 @@ H5A__exists_api_common(hid_t obj_id, const char *attr_name, bool *attr_exists, v FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_ATTR == H5I_get_type(obj_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(obj_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); if (!attr_name || !*attr_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no attribute name"); @@ -2435,7 +2482,8 @@ static herr_t H5A__exists_by_name_api_common(hid_t loc_id, const char *obj_name, const char *attr_name, bool *attr_exists, hid_t lapl_id, void **token_ptr, H5VL_object_t **_vol_obj_ptr) { - H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ H5VL_object_t **vol_obj_ptr = (_vol_obj_ptr ? _vol_obj_ptr : &tmp_vol_obj); /* Ptr to object ptr for loc_id */ H5VL_loc_params_t loc_params; /* Location parameters for object access */ @@ -2444,7 +2492,9 @@ H5A__exists_by_name_api_common(hid_t loc_id, const char *obj_name, const char *a FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); if (!attr_name || !*attr_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no attribute name"); diff --git a/src/H5Adeprec.c b/src/H5Adeprec.c index b5f9fb21647c..cb416d626738 100644 --- a/src/H5Adeprec.c +++ b/src/H5Adeprec.c @@ -102,15 +102,18 @@ hid_t H5Acreate1(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id, hid_t acpl_id) { - void *attr = NULL; /* attr object from VOL connector */ - H5VL_object_t *vol_obj = NULL; /* Object of loc_id */ + void *attr = NULL; /* attr object from VOL connector */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Object of loc_id */ H5VL_loc_params_t loc_params; hid_t ret_value = H5I_INVALID_HID; /* Return value */ FUNC_ENTER_API(H5I_INVALID_HID) /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); if (!name || !*name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "no name"); @@ -125,7 +128,7 @@ H5Acreate1(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id, hid_t /* Set location parameters */ loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.obj_type = vol_obj_type; /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -175,22 +178,25 @@ H5Acreate1(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id, hid_t hid_t H5Aopen_name(hid_t loc_id, const char *name) { - void *attr = NULL; /* attr object from VOL connector */ - H5VL_object_t *vol_obj = NULL; /* Object of loc_id */ + void *attr = NULL; /* attr object from VOL connector */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Object of loc_id */ H5VL_loc_params_t loc_params; hid_t ret_value = H5I_INVALID_HID; /* Return value */ FUNC_ENTER_API(H5I_INVALID_HID) /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); if (!name || !*name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "no name"); /* Set location parameters */ loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.obj_type = vol_obj_type; /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -239,15 +245,18 @@ H5Aopen_name(hid_t loc_id, const char *name) hid_t H5Aopen_idx(hid_t loc_id, unsigned idx) { - void *attr = NULL; /* attr object from VOL connector */ - H5VL_object_t *vol_obj = NULL; /* Object of loc_id */ + void *attr = NULL; /* attr object from VOL connector */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Object of loc_id */ H5VL_loc_params_t loc_params; hid_t ret_value = H5I_INVALID_HID; /* Return value */ FUNC_ENTER_API(H5I_INVALID_HID) /* Check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); /* Set location parameters */ @@ -257,7 +266,7 @@ H5Aopen_idx(hid_t loc_id, unsigned idx) loc_params.loc_data.loc_by_idx.order = H5_ITER_INC; loc_params.loc_data.loc_by_idx.n = (hsize_t)idx; loc_params.loc_data.loc_by_idx.lapl_id = H5P_LINK_ACCESS_DEFAULT; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.obj_type = vol_obj_type; /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -302,16 +311,21 @@ H5Aopen_idx(hid_t loc_id, unsigned idx) int H5Aget_num_attrs(hid_t loc_id) { - H5VL_object_t *vol_obj = NULL; /* Object of loc_id */ - H5VL_object_get_args_t vol_cb_args; /* Arguments to VOL callback */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Object of loc_id */ + H5VL_object_get_args_t vol_cb_args; /* Arguments to VOL callback */ H5VL_loc_params_t loc_params; H5O_info2_t oinfo; int ret_value = -1; FUNC_ENTER_API((-1)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, (-1), "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, (-1), "location is not valid for an attribute"); loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.obj_type = vol_obj_type; /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -372,15 +386,18 @@ H5Aget_num_attrs(hid_t loc_id) herr_t H5Aiterate1(hid_t loc_id, unsigned *attr_num /*in,out*/, H5A_operator1_t op, void *op_data) { - H5VL_object_t *vol_obj = NULL; /* Object of loc_id */ - H5VL_optional_args_t vol_cb_args; /* Arguments to VOL callback */ - H5VL_native_attr_optional_args_t attr_opt_args; /* Arguments for optional operation */ - herr_t ret_value; /* Return value */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Object of loc_id */ + H5VL_optional_args_t vol_cb_args; /* Arguments to VOL callback */ + H5VL_native_attr_optional_args_t attr_opt_args; /* Arguments for optional operation */ + herr_t ret_value; /* Return value */ FUNC_ENTER_API(H5_ITER_ERROR) /* check arguments */ - if (H5I_ATTR == H5I_get_type(loc_id)) + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5_ITER_ERROR, "invalid location identifier"); + if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5_ITER_ERROR, "location is not valid for an attribute"); /* Get the location object */ diff --git a/src/H5D.c b/src/H5D.c index 7cb8e2ab59f3..8225131def75 100644 --- a/src/H5D.c +++ b/src/H5D.c @@ -272,14 +272,18 @@ H5Dcreate_async(const char *app_file, const char *app_func, unsigned app_line, h hid_t H5Dcreate_anon(hid_t loc_id, hid_t type_id, hid_t space_id, hid_t dcpl_id, hid_t dapl_id) { - void *dset = NULL; /* dset object from VOL connector */ - H5VL_object_t *vol_obj = NULL; /* Object for loc_id */ + void *dset = NULL; /* dset object from VOL connector */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Object for loc_id */ H5VL_loc_params_t loc_params; /* Location parameters for object access */ hid_t ret_value = H5I_INVALID_HID; /* Return value */ FUNC_ENTER_API(H5I_INVALID_HID) /* Check arguments */ + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + if (H5P_DEFAULT == dcpl_id) dcpl_id = H5P_DATASET_CREATE_DEFAULT; else if (true != H5P_isa_class(dcpl_id, H5P_DATASET_CREATE)) @@ -303,7 +307,7 @@ H5Dcreate_anon(hid_t loc_id, hid_t type_id, hid_t space_id, hid_t dcpl_id, hid_t /* Set location parameters */ loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.obj_type = vol_obj_type; /* Create the dataset */ if (NULL == diff --git a/src/H5Ddeprec.c b/src/H5Ddeprec.c index dff60e3110a2..96a10901c765 100644 --- a/src/H5Ddeprec.c +++ b/src/H5Ddeprec.c @@ -123,8 +123,9 @@ H5Dcreate1(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id, hid_t H5CX_set_dcpl(dcpl_id); /* Set location parameters */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(loc_id)) == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); /* get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -179,8 +180,9 @@ H5Dopen1(hid_t loc_id, const char *name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "name parameter cannot be an empty string"); /* Set location parameters */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(loc_id)) == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); /* get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) diff --git a/src/H5G.c b/src/H5G.c index 5fb9d3b65061..07ef1fa441b3 100644 --- a/src/H5G.c +++ b/src/H5G.c @@ -313,13 +313,18 @@ H5Gcreate_async(const char *app_file, const char *app_func, unsigned app_line, h hid_t H5Gcreate_anon(hid_t loc_id, hid_t gcpl_id, hid_t gapl_id) { - void *grp = NULL; /* Structure for new group */ - H5VL_object_t *vol_obj = NULL; /* Object for loc_id */ + void *grp = NULL; /* Structure for new group */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Object for loc_id */ H5VL_loc_params_t loc_params; /* Location parameters for object access */ hid_t ret_value = H5I_INVALID_HID; /* Return value */ FUNC_ENTER_API(H5I_INVALID_HID) + /* Check arguments */ + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + /* Check group property list */ if (H5P_DEFAULT == gcpl_id) gcpl_id = H5P_GROUP_CREATE_DEFAULT; @@ -337,7 +342,7 @@ H5Gcreate_anon(hid_t loc_id, hid_t gcpl_id, hid_t gapl_id) /* Set location struct fields */ loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.obj_type = vol_obj_type; /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -549,7 +554,8 @@ H5G__get_info_api_common(hid_t loc_id, H5G_info_t *group_info /*out*/, void **to FUNC_ENTER_PACKAGE /* Check args */ - id_type = H5I_get_type(loc_id); + if (H5I_BADID == (id_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); if (!(H5I_GROUP == id_type || H5I_FILE == id_type)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid group (or file) ID"); if (!group_info) diff --git a/src/H5Gdeprec.c b/src/H5Gdeprec.c index b610ad473ce2..bd05157d751f 100644 --- a/src/H5Gdeprec.c +++ b/src/H5Gdeprec.c @@ -152,8 +152,9 @@ H5G_map_obj_type(H5O_type_t obj_type) hid_t H5Gcreate1(hid_t loc_id, const char *name, size_t size_hint) { - void *grp = NULL; /* New group created */ - H5VL_object_t *vol_obj; /* Object of loc_id */ + void *grp = NULL; /* New group created */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj; /* Object of loc_id */ H5VL_loc_params_t loc_params; hid_t tmp_gcpl = H5I_INVALID_HID; /* Temporary group creation property list */ hid_t ret_value = H5I_INVALID_HID; /* Return value */ @@ -161,6 +162,8 @@ H5Gcreate1(hid_t loc_id, const char *name, size_t size_hint) FUNC_ENTER_API(H5I_INVALID_HID) /* Check arguments */ + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); if (!name || !*name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "no name given"); if (size_hint > UINT32_MAX) @@ -201,7 +204,7 @@ H5Gcreate1(hid_t loc_id, const char *name, size_t size_hint) /* Set location parameters */ loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.obj_type = vol_obj_type; /* get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -246,20 +249,23 @@ H5Gcreate1(hid_t loc_id, const char *name, size_t size_hint) hid_t H5Gopen1(hid_t loc_id, const char *name) { - void *grp = NULL; /* Group opened */ - H5VL_object_t *vol_obj = NULL; /* Object of loc_id */ + void *grp = NULL; /* Group opened */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Object of loc_id */ H5VL_loc_params_t loc_params; hid_t ret_value = H5I_INVALID_HID; /* Return value */ FUNC_ENTER_API(H5I_INVALID_HID) /* Check args */ + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); if (!name || !*name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "no name"); /* Set location parameters */ loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.obj_type = vol_obj_type; /* get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -536,11 +542,13 @@ H5Gmove2(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id, const char *d else if (dst_loc_id == H5L_SAME_LOC) dst_loc_id = src_loc_id; - src_id_type = H5I_get_type(src_loc_id); + if (H5I_BADID == (src_id_type = H5I_get_type(src_loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid source identifier"); if (!(H5I_GROUP == src_id_type || H5I_FILE == src_id_type)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid group (or file) ID, src_loc_id"); - dst_id_type = H5I_get_type(dst_loc_id); + if (H5I_BADID == (dst_id_type = H5I_get_type(dst_loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid destination identifier"); if (!(H5I_GROUP == dst_id_type || H5I_FILE == dst_id_type)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid group (or file) ID, dst_loc_id"); @@ -893,7 +901,8 @@ H5Gget_num_objs(hid_t loc_id, hsize_t *num_objs /*out*/) FUNC_ENTER_API(FAIL) /* Check args */ - id_type = H5I_get_type(loc_id); + if (H5I_BADID == (id_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!(H5I_GROUP == id_type || H5I_FILE == id_type)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid group (or file) ID"); if (!num_objs) @@ -1043,7 +1052,7 @@ H5G__get_objinfo_cb(H5G_loc_t H5_ATTR_UNUSED *grp_loc /*in*/, const char *name, statbuf->ohdr.nmesgs = nat_info.hdr.nmesgs; statbuf->ohdr.nchunks = nat_info.hdr.nchunks; } /* end if */ - } /* end if */ + } /* end if */ done: /* Indicate that this callback didn't take ownership of the group * diff --git a/src/H5I.c b/src/H5I.c index 4b8fc4f02318..1d3b8377537b 100644 --- a/src/H5I.c +++ b/src/H5I.c @@ -851,14 +851,19 @@ H5Iget_file_id(hid_t obj_id) ssize_t H5Iget_name(hid_t id, char *name /*out*/, size_t size) { - H5VL_object_t *vol_obj = NULL; /* Object stored in ID */ - H5VL_object_get_args_t vol_cb_args; /* Arguments to VOL callback */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* Object stored in ID */ + H5VL_object_get_args_t vol_cb_args; /* Arguments to VOL callback */ H5VL_loc_params_t loc_params; size_t obj_name_len = 0; /* Length of object's name */ ssize_t ret_value = -1; /* Return value */ FUNC_ENTER_API((-1)) + /* Get object type */ + if ((vol_obj_type = H5I_get_type(id)) < 0) + HGOTO_ERROR(H5E_VOL, H5E_BADTYPE, FAIL, "invalid identifier"); + /* If name size is zero, treat as length query and do not write, even a '\0' */ if (name && size == 0) name = NULL; @@ -869,7 +874,7 @@ H5Iget_name(hid_t id, char *name /*out*/, size_t size) /* Set location parameters */ loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(id); + loc_params.obj_type = vol_obj_type; /* Set up VOL callback arguments */ vol_cb_args.op_type = H5VL_OBJECT_GET_NAME; diff --git a/src/H5L.c b/src/H5L.c index ee603bfa801b..ce7106f3e7fd 100644 --- a/src/H5L.c +++ b/src/H5L.c @@ -115,9 +115,13 @@ H5Lmove(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id, const char *ds /* verify that src and dst IDs are either a file or a group ID */ src_id_type = H5I_get_type(src_loc_id); + if (src_id_type == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!(H5I_GROUP == src_id_type || H5I_FILE == src_id_type)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid group (or file) ID, src_loc_id"); dst_id_type = H5I_get_type(dst_loc_id); + if (dst_id_type == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!(H5I_GROUP == dst_id_type || H5I_FILE == dst_id_type)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid group (or file) ID, dst_loc_id"); @@ -218,9 +222,13 @@ H5Lcopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id, const char *ds /* verify that src and dst IDs are either a file or a group ID */ src_id_type = H5I_get_type(src_loc_id); + if (src_id_type == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!(H5I_GROUP == src_id_type || H5I_FILE == src_id_type) && src_loc_id != H5L_SAME_LOC) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid group (or file) ID, src_loc_id"); dst_id_type = H5I_get_type(dst_loc_id); + if (dst_id_type == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!(H5I_GROUP == dst_id_type || H5I_FILE == dst_id_type) && dst_loc_id != H5L_SAME_LOC) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid group (or file) ID, dst_loc_id"); @@ -1549,6 +1557,8 @@ H5L__iterate_api_common(hid_t group_id, H5_index_t idx_type, H5_iter_order_t ord /* Check arguments */ id_type = H5I_get_type(group_id); + if (id_type == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid group identifier"); if (!(H5I_GROUP == id_type || H5I_FILE == id_type)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid argument"); if (idx_type <= H5_INDEX_UNKNOWN || idx_type >= H5_INDEX_N) @@ -1775,6 +1785,8 @@ H5Lvisit2(hid_t group_id, H5_index_t idx_type, H5_iter_order_t order, H5L_iterat /* Check args */ id_type = H5I_get_type(group_id); + if (id_type == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid group identifier"); if (!(H5I_GROUP == id_type || H5I_FILE == id_type)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid argument"); if (idx_type <= H5_INDEX_UNKNOWN || idx_type >= H5_INDEX_N) @@ -1784,14 +1796,15 @@ H5Lvisit2(hid_t group_id, H5_index_t idx_type, H5_iter_order_t order, H5L_iterat if (!op) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no callback operator specified"); - /* Set location struct fields */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(group_id); - /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(group_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + /* Set location struct fields */ + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(group_id)) == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "unable to get type"); + /* Set up VOL callback arguments */ vol_cb_args.op_type = H5VL_LINK_ITER; vol_cb_args.args.iterate.recursive = true; diff --git a/src/H5Ldeprec.c b/src/H5Ldeprec.c index bac57f2bf45b..dda934a8ad29 100644 --- a/src/H5Ldeprec.c +++ b/src/H5Ldeprec.c @@ -151,7 +151,8 @@ H5Literate1(hid_t group_id, H5_index_t idx_type, H5_iter_order_t order, hsize_t FUNC_ENTER_API(FAIL) /* Check arguments */ - id_type = H5I_get_type(group_id); + if (H5I_BADID == (id_type = H5I_get_type(group_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid group identifier"); if (!(H5I_GROUP == id_type || H5I_FILE == id_type)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid argument"); if (idx_type <= H5_INDEX_UNKNOWN || idx_type >= H5_INDEX_N) @@ -174,7 +175,7 @@ H5Literate1(hid_t group_id, H5_index_t idx_type, H5_iter_order_t order, hsize_t /* Set location struct fields */ loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(group_id); + loc_params.obj_type = id_type; /* Set up shim */ shim_data.real_op = op; @@ -500,7 +501,8 @@ H5Lvisit1(hid_t group_id, H5_index_t idx_type, H5_iter_order_t order, H5L_iterat FUNC_ENTER_API(FAIL) /* Check args */ - id_type = H5I_get_type(group_id); + if (H5I_BADID == (id_type = H5I_get_type(group_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid group identifier"); if (!(H5I_GROUP == id_type || H5I_FILE == id_type)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid argument"); if (idx_type <= H5_INDEX_UNKNOWN || idx_type >= H5_INDEX_N) @@ -512,7 +514,7 @@ H5Lvisit1(hid_t group_id, H5_index_t idx_type, H5_iter_order_t order, H5L_iterat /* Set location struct fields */ loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(group_id); + loc_params.obj_type = id_type; /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(group_id))) diff --git a/src/H5M.c b/src/H5M.c index 0ff691009130..f2f27f4c1418 100644 --- a/src/H5M.c +++ b/src/H5M.c @@ -423,8 +423,9 @@ H5Mcreate_async(const char *app_file, const char *app_func, unsigned app_line, h hid_t H5Mcreate_anon(hid_t loc_id, hid_t key_type_id, hid_t val_type_id, hid_t mcpl_id, hid_t mapl_id) { - void *map = NULL; /* map object from VOL connector */ - H5VL_object_t *vol_obj = NULL; /* object of loc_id */ + void *map = NULL; /* map object from VOL connector */ + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; /* object of loc_id */ H5VL_optional_args_t vol_cb_args; /* Arguments to VOL callback */ H5VL_map_args_t map_args; /* Arguments for map operations */ hid_t ret_value = H5I_INVALID_HID; /* Return value */ @@ -432,6 +433,8 @@ H5Mcreate_anon(hid_t loc_id, hid_t key_type_id, hid_t val_type_id, hid_t mcpl_id FUNC_ENTER_API(H5I_INVALID_HID) /* Check arguments */ + if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); if (H5P_DEFAULT == mcpl_id) mcpl_id = H5P_MAP_CREATE_DEFAULT; else if (true != H5P_isa_class(mcpl_id, H5P_MAP_CREATE)) @@ -449,7 +452,7 @@ H5Mcreate_anon(hid_t loc_id, hid_t key_type_id, hid_t val_type_id, hid_t mcpl_id /* Set up VOL callback arguments */ map_args.create.loc_params.type = H5VL_OBJECT_BY_SELF; - map_args.create.loc_params.obj_type = H5I_get_type(loc_id); + map_args.create.loc_params.obj_type = vol_obj_type; map_args.create.name = NULL; map_args.create.lcpl_id = H5P_LINK_CREATE_DEFAULT; map_args.create.key_type_id = key_type_id; @@ -1294,7 +1297,8 @@ H5Mexists(hid_t map_id, hid_t key_mem_type_id, const void *key, bool *exists, hi herr_t H5Miterate(hid_t map_id, hsize_t *idx, hid_t key_mem_type_id, H5M_iterate_t op, void *op_data, hid_t dxpl_id) { - H5VL_object_t *vol_obj = NULL; + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; H5VL_optional_args_t vol_cb_args; /* Arguments to VOL callback */ H5VL_map_args_t map_args; /* Arguments for map operations */ herr_t ret_value = SUCCEED; /* Return value */ @@ -1302,6 +1306,8 @@ H5Miterate(hid_t map_id, hsize_t *idx, hid_t key_mem_type_id, H5M_iterate_t op, FUNC_ENTER_API(FAIL) /* Check arguments */ + if (H5I_BADID == (vol_obj_type = H5I_get_type(map_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid map identifier"); if (key_mem_type_id < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid key memory datatype ID"); if (!op) @@ -1320,7 +1326,7 @@ H5Miterate(hid_t map_id, hsize_t *idx, hid_t key_mem_type_id, H5M_iterate_t op, /* Set up VOL callback arguments */ map_args.specific.specific_type = H5VL_MAP_ITER; map_args.specific.args.iterate.loc_params.type = H5VL_OBJECT_BY_SELF; - map_args.specific.args.iterate.loc_params.obj_type = H5I_get_type(map_id); + map_args.specific.args.iterate.loc_params.obj_type = vol_obj_type; map_args.specific.args.iterate.idx = (idx ? *idx : 0); map_args.specific.args.iterate.key_mem_type_id = key_mem_type_id; map_args.specific.args.iterate.op = op; @@ -1445,7 +1451,8 @@ H5Miterate_by_name(hid_t loc_id, const char *map_name, hsize_t *idx, hid_t key_m herr_t H5Mdelete(hid_t map_id, hid_t key_mem_type_id, const void *key, hid_t dxpl_id) { - H5VL_object_t *vol_obj = NULL; + H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */ + H5VL_object_t *vol_obj = NULL; H5VL_optional_args_t vol_cb_args; /* Arguments to VOL callback */ H5VL_map_args_t map_args; /* Arguments for map operations */ herr_t ret_value = SUCCEED; /* Return value */ @@ -1453,6 +1460,8 @@ H5Mdelete(hid_t map_id, hid_t key_mem_type_id, const void *key, hid_t dxpl_id) FUNC_ENTER_API(FAIL) /* Check arguments */ + if (H5I_BADID == (vol_obj_type = H5I_get_type(map_id))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid map identifier"); if (key_mem_type_id < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid key memory datatype ID"); @@ -1469,7 +1478,7 @@ H5Mdelete(hid_t map_id, hid_t key_mem_type_id, const void *key, hid_t dxpl_id) /* Set up VOL callback arguments */ map_args.specific.specific_type = H5VL_MAP_DELETE; map_args.specific.args.del.loc_params.type = H5VL_OBJECT_BY_SELF; - map_args.specific.args.del.loc_params.obj_type = H5I_get_type(map_id); + map_args.specific.args.del.loc_params.obj_type = vol_obj_type; map_args.specific.args.del.key_mem_type_id = key_mem_type_id; map_args.specific.args.del.key = key; vol_cb_args.op_type = H5VL_MAP_SPECIFIC; diff --git a/src/H5O.c b/src/H5O.c index 566c4b162ebb..c292b99b79b2 100644 --- a/src/H5O.c +++ b/src/H5O.c @@ -396,6 +396,8 @@ static herr_t H5O__copy_api_common(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id, const char *dst_name, hid_t ocpypl_id, hid_t lcpl_id, void **token_ptr, H5VL_object_t **_vol_obj_ptr) { + H5I_type_t vol_obj_type = H5I_BADID; /* Object type */ + /* dst_id */ H5VL_object_t *tmp_vol_obj = NULL; /* Object for loc_id */ H5VL_object_t **vol_obj_ptr = @@ -415,6 +417,8 @@ H5O__copy_api_common(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id, c HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no source name specified"); if (!dst_name || !*dst_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no destination name specified"); + if ((vol_obj_type = H5I_get_type(dst_loc_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Get correct property lists */ if (H5P_DEFAULT == lcpl_id) @@ -439,7 +443,7 @@ H5O__copy_api_common(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id, c if (NULL == (*vol_obj_ptr = H5VL_vol_object(dst_loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); loc_params2.type = H5VL_OBJECT_BY_SELF; - loc_params2.obj_type = H5I_get_type(dst_loc_id); + loc_params2.obj_type = vol_obj_type; /* Copy the object */ if (H5VL_object_copy(vol_obj1, &loc_params1, src_name, *vol_obj_ptr, &loc_params2, dst_name, ocpypl_id, @@ -805,15 +809,18 @@ H5Orefresh_async(const char *app_file, const char *app_func, unsigned app_line, herr_t H5Olink(hid_t obj_id, hid_t new_loc_id, const char *new_name, hid_t lcpl_id, hid_t lapl_id) { - H5VL_object_t *vol_obj1 = NULL; /* object of obj_id */ - H5VL_object_t *vol_obj2 = NULL; /* object of new_loc_id */ - H5VL_link_create_args_t vol_cb_args; /* Arguments to VOL callback */ + H5I_type_t vol_obj_type = H5I_BADID, vol_obj_type1 = H5I_BADID; /* Object types */ + H5VL_object_t *vol_obj1 = NULL; /* object of obj_id */ + H5VL_object_t *vol_obj2 = NULL; /* object of new_loc_id */ + H5VL_link_create_args_t vol_cb_args; /* Arguments to VOL callback */ H5VL_loc_params_t new_loc_params; herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) /* Check arguments */ + if ((vol_obj_type = H5I_get_type(new_loc_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (new_loc_id == H5L_SAME_LOC) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "cannot use H5L_SAME_LOC when only one location is specified"); @@ -840,7 +847,7 @@ H5Olink(hid_t obj_id, hid_t new_loc_id, const char *new_name, hid_t lcpl_id, hid /* Set up new location struct */ new_loc_params.type = H5VL_OBJECT_BY_NAME; - new_loc_params.obj_type = H5I_get_type(new_loc_id); + new_loc_params.obj_type = vol_obj_type; new_loc_params.loc_data.loc_by_name.name = new_name; new_loc_params.loc_data.loc_by_name.lapl_id = lapl_id; @@ -865,11 +872,14 @@ H5Olink(hid_t obj_id, hid_t new_loc_id, const char *new_name, hid_t lcpl_id, hid "Objects are accessed through different VOL connectors and can't be linked"); } /* end if */ + if ((vol_obj_type1 = H5I_get_type(obj_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + /* Set up VOL callback arguments */ vol_cb_args.op_type = H5VL_LINK_CREATE_HARD; vol_cb_args.args.hard.curr_obj = H5VL_OBJ_DATA(vol_obj1); vol_cb_args.args.hard.curr_loc_params.type = H5VL_OBJECT_BY_SELF; - vol_cb_args.args.hard.curr_loc_params.obj_type = H5I_get_type(obj_id); + vol_cb_args.args.hard.curr_loc_params.obj_type = vol_obj_type1; /* Create a link to the object */ if (H5VL_link_create(&vol_cb_args, vol_obj2, &new_loc_params, lcpl_id, lapl_id, H5P_DATASET_XFER_DEFAULT, @@ -907,8 +917,9 @@ H5Oincr_refcount(hid_t object_id) FUNC_ENTER_API(FAIL) - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(object_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(object_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(object_id))) @@ -958,8 +969,9 @@ H5Odecr_refcount(hid_t object_id) FUNC_ENTER_API(FAIL) - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(object_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(object_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(object_id))) @@ -1065,8 +1077,9 @@ H5Oget_info3(hid_t loc_id, H5O_info2_t *oinfo /*out*/, unsigned fields) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid fields"); /* Set location struct fields */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(loc_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -1289,8 +1302,9 @@ H5Oget_native_info(hid_t loc_id, H5O_native_info_t *oinfo /*out*/, unsigned fiel HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid fields"); /* Set location struct fields */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(loc_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -1472,8 +1486,9 @@ H5Oset_comment(hid_t obj_id, const char *comment) HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set collective metadata read info"); /* Fill in location struct fields */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(obj_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(obj_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); /* Set up VOL callback arguments */ obj_opt_args.set_comment.comment = comment; @@ -1576,8 +1591,9 @@ H5Oget_comment(hid_t obj_id, char *comment /*out*/, size_t bufsize) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, (-1), "invalid location identifier"); /* Set fields in the location struct */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(obj_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(obj_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, (-1), "invalid object identifier"); /* Set up VOL callback arguments */ obj_opt_args.get_comment.buf = comment; @@ -1718,8 +1734,9 @@ H5Ovisit3(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order, H5O_iterate2 HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Set location parameters */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(obj_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(obj_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); /* Set up VOL callback arguments */ vol_cb_args.op_type = H5VL_OBJECT_VISIT; @@ -2022,8 +2039,9 @@ H5Odisable_mdc_flushes(hid_t object_id) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object ID"); /* Fill in location struct fields */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(object_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(object_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); /* Set up VOL callback arguments */ vol_cb_args.op_type = H5VL_NATIVE_OBJECT_DISABLE_MDC_FLUSHES; @@ -2091,8 +2109,9 @@ H5Oenable_mdc_flushes(hid_t object_id) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object ID"); /* Fill in location struct fields */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(object_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(object_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); /* Set up VOL callback arguments */ vol_cb_args.op_type = H5VL_NATIVE_OBJECT_ENABLE_MDC_FLUSHES; @@ -2170,8 +2189,9 @@ H5Oare_mdc_flushes_disabled(hid_t object_id, bool *are_disabled) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object ID"); /* Fill in location struct fields */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(object_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(object_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); /* Set up VOL callback arguments */ obj_opt_args.are_mdc_flushes_disabled.flag = are_disabled; @@ -2292,7 +2312,7 @@ H5Otoken_from_str(hid_t loc_id, const char *token_str, H5O_token_t *token) /* Get object type */ if ((vol_obj_type = H5I_get_type(loc_id)) < 0) - HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't get underlying VOL object type"); + HGOTO_ERROR(H5E_ARGS, H5E_CANTGET, FAIL, "can't get underlying VOL object type"); /* Deserialize the token */ if (H5VL_token_from_str(vol_obj, vol_obj_type, token_str, token) < 0) diff --git a/src/H5Odeprec.c b/src/H5Odeprec.c index 76adad4db42a..ac9305880047 100644 --- a/src/H5Odeprec.c +++ b/src/H5Odeprec.c @@ -183,7 +183,8 @@ H5O__iterate1_adapter(hid_t obj_id, const char *name, const H5O_info2_t *oinfo2, loc_params.type = H5VL_OBJECT_BY_NAME; loc_params.loc_data.loc_by_name.name = name; loc_params.loc_data.loc_by_name.lapl_id = H5P_LINK_ACCESS_DEFAULT; - loc_params.obj_type = H5I_get_type(obj_id); + if ((loc_params.obj_type = H5I_get_type(obj_id)) < 0) + HGOTO_ERROR(H5E_OHDR, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Set up VOL callback arguments */ obj_opt_args.get_native_info.fields = nat_fields; @@ -306,7 +307,7 @@ H5O__get_info_old(H5VL_object_t *vol_obj, H5VL_loc_params_t *loc_params, H5O_inf H5MM_memcpy(&(oinfo->meta_size.obj), &(nat_info.meta_size.obj), sizeof(H5_ih_info_t)); H5MM_memcpy(&(oinfo->meta_size.attr), &(nat_info.meta_size.attr), sizeof(H5_ih_info_t)); } /* end if */ - } /* end if */ + } /* end if */ done: FUNC_LEAVE_NOAPI(ret_value) @@ -428,8 +429,9 @@ H5Oget_info1(hid_t loc_id, H5O_info1_t *oinfo /*out*/) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "oinfo parameter cannot be NULL"); /* Set location struct fields */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(loc_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -488,7 +490,8 @@ H5Oget_info_by_name1(hid_t loc_id, const char *name, H5O_info1_t *oinfo /*out*/, loc_params.type = H5VL_OBJECT_BY_NAME; loc_params.loc_data.loc_by_name.name = name; loc_params.loc_data.loc_by_name.lapl_id = lapl_id; - loc_params.obj_type = H5I_get_type(loc_id); + if ((loc_params.obj_type = H5I_get_type(loc_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -553,7 +556,8 @@ H5Oget_info_by_idx1(hid_t loc_id, const char *group_name, H5_index_t idx_type, H loc_params.loc_data.loc_by_idx.order = order; loc_params.loc_data.loc_by_idx.n = n; loc_params.loc_data.loc_by_idx.lapl_id = lapl_id; - loc_params.obj_type = H5I_get_type(loc_id); + if ((loc_params.obj_type = H5I_get_type(loc_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -604,8 +608,9 @@ H5Oget_info2(hid_t loc_id, H5O_info1_t *oinfo /*out*/, unsigned fields) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid fields"); /* Set location struct fields */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(loc_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -613,10 +618,9 @@ H5Oget_info2(hid_t loc_id, H5O_info1_t *oinfo /*out*/, unsigned fields) /* Check if the VOL object is a native VOL connector object */ if (H5VL_object_is_native(vol_obj, &is_native_vol_obj) < 0) - HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, H5I_INVALID_HID, - "can't determine if VOL object is native connector object"); + HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't determine if VOL object is native connector object"); if (!is_native_vol_obj) - HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, H5I_INVALID_HID, + HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, FAIL, "Deprecated H5Oget_info2 is only meant to be used with the native VOL connector"); /* Retrieve deprecated info struct */ @@ -667,7 +671,8 @@ H5Oget_info_by_name2(hid_t loc_id, const char *name, H5O_info1_t *oinfo /*out*/, loc_params.type = H5VL_OBJECT_BY_NAME; loc_params.loc_data.loc_by_name.name = name; loc_params.loc_data.loc_by_name.lapl_id = lapl_id; - loc_params.obj_type = H5I_get_type(loc_id); + if ((loc_params.obj_type = H5I_get_type(loc_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -675,10 +680,9 @@ H5Oget_info_by_name2(hid_t loc_id, const char *name, H5O_info1_t *oinfo /*out*/, /* Check if the VOL object is a native VOL connector object */ if (H5VL_object_is_native(vol_obj, &is_native_vol_obj) < 0) - HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, H5I_INVALID_HID, - "can't determine if VOL object is native connector object"); + HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't determine if VOL object is native connector object"); if (!is_native_vol_obj) - HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, H5I_INVALID_HID, + HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, FAIL, "Deprecated H5Oget_info_by_name2 is only meant to be used with the native VOL connector"); /* Retrieve deprecated info struct */ @@ -735,7 +739,8 @@ H5Oget_info_by_idx2(hid_t loc_id, const char *group_name, H5_index_t idx_type, H loc_params.loc_data.loc_by_idx.order = order; loc_params.loc_data.loc_by_idx.n = n; loc_params.loc_data.loc_by_idx.lapl_id = lapl_id; - loc_params.obj_type = H5I_get_type(loc_id); + if ((loc_params.obj_type = H5I_get_type(loc_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -743,10 +748,9 @@ H5Oget_info_by_idx2(hid_t loc_id, const char *group_name, H5_index_t idx_type, H /* Check if the VOL object is a native VOL connector object */ if (H5VL_object_is_native(vol_obj, &is_native_vol_obj) < 0) - HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, H5I_INVALID_HID, - "can't determine if VOL object is native connector object"); + HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't determine if VOL object is native connector object"); if (!is_native_vol_obj) - HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, H5I_INVALID_HID, + HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, FAIL, "Deprecated H5Oget_info_by_idx2 is only meant to be used with the native VOL connector"); /* Retrieve deprecated info struct */ @@ -820,8 +824,9 @@ H5Ovisit1(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order, H5O_iterate1 "Deprecated H5Ovisit1 is only meant to be used with the native VOL connector"); /* Set location parameters */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(obj_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(obj_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); /* Set up adapter */ shim_data.real_op = op; @@ -920,7 +925,8 @@ H5Ovisit_by_name1(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_it loc_params.type = H5VL_OBJECT_BY_NAME; loc_params.loc_data.loc_by_name.name = obj_name; loc_params.loc_data.loc_by_name.lapl_id = lapl_id; - loc_params.obj_type = H5I_get_type(loc_id); + if ((loc_params.obj_type = H5I_get_type(loc_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); /* Set up adapter */ shim_data.real_op = op; @@ -1005,16 +1011,16 @@ H5Ovisit2(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order, H5O_iterate1 /* Check if the VOL object is a native VOL connector object */ if (H5VL_object_is_native(vol_obj, &is_native_vol_obj) < 0) - HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, H5I_INVALID_HID, - "can't determine if VOL object is native connector object"); + HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't determine if VOL object is native connector object"); if (!is_native_vol_obj) - HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, H5I_INVALID_HID, + HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, FAIL, "Deprecated H5Ovisit2 is only meant to be used with the native VOL connector"); /* Set location parameters */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(obj_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(obj_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); /* Set up adapter */ shim_data.real_op = op; @@ -1107,17 +1113,17 @@ H5Ovisit_by_name2(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_it /* Check if the VOL object is a native VOL connector object */ if (H5VL_object_is_native(vol_obj, &is_native_vol_obj) < 0) - HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, H5I_INVALID_HID, - "can't determine if VOL object is native connector object"); + HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't determine if VOL object is native connector object"); if (!is_native_vol_obj) - HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, H5I_INVALID_HID, + HGOTO_ERROR(H5E_OHDR, H5E_BADVALUE, FAIL, "Deprecated H5Ovisit_by_name2 is only meant to be used with the native VOL connector"); /* Set location parameters */ loc_params.type = H5VL_OBJECT_BY_NAME; loc_params.loc_data.loc_by_name.name = obj_name; loc_params.loc_data.loc_by_name.lapl_id = lapl_id; - loc_params.obj_type = H5I_get_type(loc_id); + if ((loc_params.obj_type = H5I_get_type(loc_id)) < 0) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); /* Set up adapter */ shim_data.real_op = op; diff --git a/src/H5Oflush.c b/src/H5Oflush.c index c6e051e276ba..bb493df7eeca 100644 --- a/src/H5Oflush.c +++ b/src/H5Oflush.c @@ -362,7 +362,8 @@ H5O_refresh_metadata_reopen(hid_t oid, hid_t apl_id, H5G_loc_t *obj_loc, H5VL_co assert(vol_connector); /* Get object's type */ - type = H5I_get_type(oid); + if (H5I_BADID == (type = H5I_get_type(oid))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); switch (type) { case H5I_GROUP: diff --git a/src/H5Tcommit.c b/src/H5Tcommit.c index a30985e30588..3aee6e4cf25b 100644 --- a/src/H5Tcommit.c +++ b/src/H5Tcommit.c @@ -284,7 +284,7 @@ H5T__commit_named(const H5G_loc_t *loc, const char *name, H5T_t *dt, hid_t lcpl_ dt->sh_loc.type = H5O_SHARE_TYPE_UNSHARED; dt->shared->state = old_state; } /* end if */ - } /* end if */ + } /* end if */ FUNC_LEAVE_NOAPI(ret_value) } /* end H5T__commit_named() */ @@ -339,8 +339,9 @@ H5Tcommit_anon(hid_t loc_id, hid_t type_id, hid_t tcpl_id, hid_t tapl_id) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "can't set access property list info"); /* Fill in location struct fields */ - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(loc_id)) == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Get the file object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) diff --git a/src/H5Tdeprec.c b/src/H5Tdeprec.c index 3c9bdf97fcc1..1b2bbe789d1a 100644 --- a/src/H5Tdeprec.c +++ b/src/H5Tdeprec.c @@ -112,8 +112,9 @@ H5Tcommit1(hid_t loc_id, const char *name, hid_t type_id) if (H5CX_set_loc(loc_id) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "can't set access property list info"); - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(loc_id)) == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* get the object from the loc_id */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) @@ -163,8 +164,9 @@ H5Topen1(hid_t loc_id, const char *name) if (!name || !*name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "no name"); - loc_params.type = H5VL_OBJECT_BY_SELF; - loc_params.obj_type = H5I_get_type(loc_id); + loc_params.type = H5VL_OBJECT_BY_SELF; + if ((loc_params.obj_type = H5I_get_type(loc_id)) == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); /* Get the location object */ if (NULL == (vol_obj = H5VL_vol_object(loc_id))) diff --git a/src/H5VLint.c b/src/H5VLint.c index cf65a7ff0ad7..d09826b42ae8 100644 --- a/src/H5VLint.c +++ b/src/H5VLint.c @@ -298,9 +298,9 @@ H5VL_term_package(void) if (0 == n) H5_PKG_INIT_VAR = false; } /* end else */ - } /* end else */ - } /* end else */ - } /* end if */ + } /* end else */ + } /* end else */ + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5VL_term_package() */ @@ -431,7 +431,7 @@ H5VL__set_def_conn(void) if (NULL == (connector = H5VL__register_connector_by_name(tok, H5P_VOL_INITIALIZE_DEFAULT))) HGOTO_ERROR(H5E_VOL, H5E_CANTREGISTER, FAIL, "can't register connector"); } /* end else */ - } /* end else */ + } /* end else */ /* Was there any connector info specified in the environment variable? */ if (NULL != (tok = HDstrtok_r(NULL, "\n\r", &lasts))) @@ -631,8 +631,8 @@ H5VL_conn_prop_copy(H5VL_connector_prop_t *connector_prop) /* Set the connector info to the copy */ connector_prop->connector_info = new_connector_info; } /* end if */ - } /* end if */ - } /* end if */ + } /* end if */ + } /* end if */ done: FUNC_LEAVE_NOAPI(ret_value) @@ -955,14 +955,14 @@ H5VL__conn_find(H5PL_vol_key_t *key, H5VL_connector_t **connector) *connector = node; break; } /* end if */ - } /* end if */ + } /* end if */ else { assert(H5VL_GET_CONNECTOR_BY_VALUE == key->kind); if (node->cls->value == key->u.value) { *connector = node; break; } /* end if */ - } /* end else */ + } /* end else */ /* Advance to next node */ node = node->next; @@ -2648,8 +2648,9 @@ H5VL_setup_loc_args(hid_t loc_id, H5VL_object_t **vol_obj, H5VL_loc_params_t *lo HGOTO_ERROR(H5E_VOL, H5E_CANTSET, FAIL, "can't set collective metadata read"); /* Set location parameters */ - loc_params->type = H5VL_OBJECT_BY_SELF; - loc_params->obj_type = H5I_get_type(loc_id); + loc_params->type = H5VL_OBJECT_BY_SELF; + if ((loc_params->obj_type = H5I_get_type(loc_id)) == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); done: FUNC_LEAVE_NOAPI(ret_value) @@ -2687,8 +2688,9 @@ H5VL_setup_acc_args(hid_t loc_id, const H5P_libclass_t *libclass, bool is_collec HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Set location parameters */ - loc_params->type = H5VL_OBJECT_BY_SELF; - loc_params->obj_type = H5I_get_type(loc_id); + loc_params->type = H5VL_OBJECT_BY_SELF; + if ((loc_params->obj_type = H5I_get_type(loc_id)) == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); done: FUNC_LEAVE_NOAPI(ret_value) @@ -2719,8 +2721,9 @@ H5VL_setup_self_args(hid_t loc_id, H5VL_object_t **vol_obj, H5VL_loc_params_t *l HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); /* Set location parameters */ - loc_params->type = H5VL_OBJECT_BY_SELF; - loc_params->obj_type = H5I_get_type(loc_id); + loc_params->type = H5VL_OBJECT_BY_SELF; + if ((loc_params->obj_type = H5I_get_type(loc_id)) == H5I_BADID) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); done: FUNC_LEAVE_NOAPI(ret_value) From 2bdceaa7c82762af1ec90f971a05cb1b77c9c0d4 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 19 Oct 2026 05:00:54 +0000 Subject: [PATCH 2/3] Committing clang-format changes --- src/H5Gdeprec.c | 2 +- src/H5Odeprec.c | 2 +- src/H5Tcommit.c | 2 +- src/H5VLint.c | 16 ++++++++-------- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/H5Gdeprec.c b/src/H5Gdeprec.c index bd05157d751f..bece0e3d23a4 100644 --- a/src/H5Gdeprec.c +++ b/src/H5Gdeprec.c @@ -1052,7 +1052,7 @@ H5G__get_objinfo_cb(H5G_loc_t H5_ATTR_UNUSED *grp_loc /*in*/, const char *name, statbuf->ohdr.nmesgs = nat_info.hdr.nmesgs; statbuf->ohdr.nchunks = nat_info.hdr.nchunks; } /* end if */ - } /* end if */ + } /* end if */ done: /* Indicate that this callback didn't take ownership of the group * diff --git a/src/H5Odeprec.c b/src/H5Odeprec.c index ac9305880047..87580184a77d 100644 --- a/src/H5Odeprec.c +++ b/src/H5Odeprec.c @@ -307,7 +307,7 @@ H5O__get_info_old(H5VL_object_t *vol_obj, H5VL_loc_params_t *loc_params, H5O_inf H5MM_memcpy(&(oinfo->meta_size.obj), &(nat_info.meta_size.obj), sizeof(H5_ih_info_t)); H5MM_memcpy(&(oinfo->meta_size.attr), &(nat_info.meta_size.attr), sizeof(H5_ih_info_t)); } /* end if */ - } /* end if */ + } /* end if */ done: FUNC_LEAVE_NOAPI(ret_value) diff --git a/src/H5Tcommit.c b/src/H5Tcommit.c index 3aee6e4cf25b..937a42489657 100644 --- a/src/H5Tcommit.c +++ b/src/H5Tcommit.c @@ -284,7 +284,7 @@ H5T__commit_named(const H5G_loc_t *loc, const char *name, H5T_t *dt, hid_t lcpl_ dt->sh_loc.type = H5O_SHARE_TYPE_UNSHARED; dt->shared->state = old_state; } /* end if */ - } /* end if */ + } /* end if */ FUNC_LEAVE_NOAPI(ret_value) } /* end H5T__commit_named() */ diff --git a/src/H5VLint.c b/src/H5VLint.c index d09826b42ae8..8362d8e859c7 100644 --- a/src/H5VLint.c +++ b/src/H5VLint.c @@ -298,9 +298,9 @@ H5VL_term_package(void) if (0 == n) H5_PKG_INIT_VAR = false; } /* end else */ - } /* end else */ - } /* end else */ - } /* end if */ + } /* end else */ + } /* end else */ + } /* end if */ FUNC_LEAVE_NOAPI(n) } /* end H5VL_term_package() */ @@ -431,7 +431,7 @@ H5VL__set_def_conn(void) if (NULL == (connector = H5VL__register_connector_by_name(tok, H5P_VOL_INITIALIZE_DEFAULT))) HGOTO_ERROR(H5E_VOL, H5E_CANTREGISTER, FAIL, "can't register connector"); } /* end else */ - } /* end else */ + } /* end else */ /* Was there any connector info specified in the environment variable? */ if (NULL != (tok = HDstrtok_r(NULL, "\n\r", &lasts))) @@ -631,8 +631,8 @@ H5VL_conn_prop_copy(H5VL_connector_prop_t *connector_prop) /* Set the connector info to the copy */ connector_prop->connector_info = new_connector_info; } /* end if */ - } /* end if */ - } /* end if */ + } /* end if */ + } /* end if */ done: FUNC_LEAVE_NOAPI(ret_value) @@ -955,14 +955,14 @@ H5VL__conn_find(H5PL_vol_key_t *key, H5VL_connector_t **connector) *connector = node; break; } /* end if */ - } /* end if */ + } /* end if */ else { assert(H5VL_GET_CONNECTOR_BY_VALUE == key->kind); if (node->cls->value == key->u.value) { *connector = node; break; } /* end if */ - } /* end else */ + } /* end else */ /* Advance to next node */ node = node->next; From 1d4b699c03451589f01bd09fa26fa4d4977da18f Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Sat, 24 Oct 2026 12:02:21 -0400 Subject: [PATCH 3/3] Added macro to determine if an H5I_type_t is a "location type" --- src/H5A.c | 85 +++++++++++++++++++++++++++++------------------- src/H5Iprivate.h | 5 ++- 2 files changed, 55 insertions(+), 35 deletions(-) diff --git a/src/H5A.c b/src/H5A.c index 928a253e2208..07b52b3c0ad5 100644 --- a/src/H5A.c +++ b/src/H5A.c @@ -161,10 +161,11 @@ H5A__create_api_common(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); if (!attr_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "attr_name parameter cannot be NULL"); if (!*attr_name) @@ -307,10 +308,11 @@ H5A__create_by_name_api_common(hid_t loc_id, const char *obj_name, const char *a FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); if (!attr_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "attr_name parameter cannot be NULL"); if (!*attr_name) @@ -496,10 +498,11 @@ H5A__open_api_common(hid_t loc_id, const char *attr_name, hid_t aapl_id, void ** FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); if (!attr_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "name parameter cannot be NULL"); if (!*attr_name) @@ -619,10 +622,11 @@ H5A__open_by_name_api_common(hid_t loc_id, const char *obj_name, const char *att FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); if (!attr_name || !*attr_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "no attribute name"); @@ -751,10 +755,11 @@ H5A__open_by_idx_api_common(hid_t loc_id, const char *obj_name, H5_index_t idx_t FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid location identifier"); if (!obj_name || !*obj_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5I_INVALID_HID, "no object name"); if (idx_type <= H5_INDEX_UNKNOWN || idx_type >= H5_INDEX_N) @@ -1321,10 +1326,11 @@ H5Aget_name_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_i name = NULL; /* Check args */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!obj_name || !*obj_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name"); if (!name && size) @@ -1471,10 +1477,11 @@ H5Aget_info_by_name(hid_t loc_id, const char *obj_name, const char *attr_name, H FUNC_ENTER_API(FAIL) /* Check args */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!obj_name || !*obj_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no object name"); if (!attr_name || !*attr_name) @@ -1530,10 +1537,11 @@ H5Aget_info_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_i FUNC_ENTER_API(FAIL) /* Check args */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!obj_name || !*obj_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name"); if (idx_type <= H5_INDEX_UNKNOWN || idx_type >= H5_INDEX_N) @@ -1634,10 +1642,11 @@ H5A__rename_api_common(hid_t loc_id, const char *old_name, const char *new_name, FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!old_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "old attribute name cannot be NULL"); if (!*old_name) @@ -1745,10 +1754,11 @@ H5A__rename_by_name_api_common(hid_t loc_id, const char *obj_name, const char *o FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!old_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "old attribute name cannot be NULL"); if (!*old_name) @@ -1893,10 +1903,11 @@ H5Aiterate2(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order, hsize_t *i FUNC_ENTER_API(FAIL) /* Check arguments */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (idx_type <= H5_INDEX_UNKNOWN || idx_type >= H5_INDEX_N) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid index type specified"); if (order <= H5_ITER_UNKNOWN || order >= H5_ITER_N) @@ -1985,10 +1996,11 @@ H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_i FUNC_ENTER_API(FAIL) /* Check arguments */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!obj_name || !*obj_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no object name"); if (idx_type <= H5_INDEX_UNKNOWN || idx_type >= H5_INDEX_N) @@ -2055,10 +2067,11 @@ H5Adelete(hid_t loc_id, const char *name) FUNC_ENTER_API(FAIL) /* Check arguments */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "name parameter cannot be NULL"); if (!*name) @@ -2116,10 +2129,11 @@ H5Adelete_by_name(hid_t loc_id, const char *obj_name, const char *attr_name, hid FUNC_ENTER_API(FAIL) /* Check arguments */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!obj_name || !*obj_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no object name"); if (!attr_name || !*attr_name) @@ -2188,10 +2202,11 @@ H5Adelete_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_ite FUNC_ENTER_API(FAIL) /* check arguments */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!obj_name || !*obj_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no object name"); if (idx_type <= H5_INDEX_UNKNOWN || idx_type >= H5_INDEX_N) @@ -2379,10 +2394,11 @@ H5A__exists_api_common(hid_t obj_id, const char *attr_name, bool *attr_exists, v FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(obj_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier"); + vol_obj_type = H5I_get_type(obj_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!attr_name || !*attr_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no attribute name"); if (NULL == attr_exists) @@ -2492,10 +2508,11 @@ H5A__exists_by_name_api_common(hid_t loc_id, const char *obj_name, const char *a FUNC_ENTER_PACKAGE /* Check arguments */ - if (H5I_BADID == (vol_obj_type = H5I_get_type(loc_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); + vol_obj_type = H5I_get_type(loc_id); if (H5I_ATTR == vol_obj_type) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(vol_obj_type)) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid location identifier"); if (!attr_name || !*attr_name) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no attribute name"); if (NULL == attr_exists) diff --git a/src/H5Iprivate.h b/src/H5Iprivate.h index 404cfc11c614..29cd4eacb527 100644 --- a/src/H5Iprivate.h +++ b/src/H5Iprivate.h @@ -31,9 +31,12 @@ /* Library Private Macros */ /**************************/ -/* Macro to determine if a H5I_type_t is a "library type" */ +/* Macro to determine if an H5I_type_t is a "library type" */ #define H5I_IS_LIB_TYPE(type) (type > 0 && type < H5I_NTYPES) +/* Macro to determine if an H5I_type_t is a "location type" */ +#define H5I_IS_LOC_TYPE(type) (type >= H5I_FILE && type <= H5I_MAP) + /* Flags for ID class */ #define H5I_CLASS_IS_APPLICATION 0x01