diff --git a/src/H5A.c b/src/H5A.c index 028e473f107..0245831b0ea 100644 --- a/src/H5A.c +++ b/src/H5A.c @@ -160,8 +160,8 @@ 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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(H5I_get_type(loc_id))) + 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) @@ -303,8 +303,8 @@ 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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(H5I_get_type(loc_id))) + 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) @@ -489,8 +489,8 @@ 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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(H5I_get_type(loc_id))) + 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) @@ -609,8 +609,8 @@ 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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(H5I_get_type(loc_id))) + 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"); @@ -738,8 +738,8 @@ 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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(H5I_get_type(loc_id))) + 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) @@ -1238,7 +1238,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 +1247,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 +1293,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,8 +1306,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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + vol_obj_type = H5I_get_type(loc_id); + 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) @@ -1332,7 +1334,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 +1421,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,15 +1447,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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + vol_obj_type = H5I_get_type(loc_id); + 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) @@ -1474,7 +1478,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,15 +1505,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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + vol_obj_type = H5I_get_type(loc_id); + 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) @@ -1535,7 +1541,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; @@ -1609,8 +1615,8 @@ 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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(H5I_get_type(loc_id))) + 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) @@ -1717,9 +1723,8 @@ 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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); - + if (!H5I_IS_LOC_TYPE(H5I_get_type(loc_id))) + 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) @@ -1855,16 +1860,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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + vol_obj_type = H5I_get_type(loc_id); + 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) @@ -1878,7 +1885,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,16 +1951,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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + vol_obj_type = H5I_get_type(loc_id); + 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) @@ -1973,7 +1982,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,16 +2020,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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + vol_obj_type = H5I_get_type(loc_id); + 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) @@ -2036,7 +2047,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,16 +2080,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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + vol_obj_type = H5I_get_type(loc_id); + 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) @@ -2096,7 +2109,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,16 +2151,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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + vol_obj_type = H5I_get_type(loc_id); + 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) @@ -2167,7 +2182,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; @@ -2334,8 +2349,8 @@ 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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(H5I_get_type(obj_id))) + 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) @@ -2444,8 +2459,8 @@ 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)) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute"); + if (!H5I_IS_LOC_TYPE(H5I_get_type(loc_id))) + 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/H5Adeprec.c b/src/H5Adeprec.c index b5f9fb21647..cb416d62673 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 7cb8e2ab59f..8225131def7 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 dff60e3110a..96a10901c76 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 5fb9d3b6506..07ef1fa441b 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 b610ad473ce..bece0e3d23a 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) diff --git a/src/H5I.c b/src/H5I.c index 4b8fc4f0231..1d3b8377537 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/H5Iprivate.h b/src/H5Iprivate.h index 404cfc11c61..29cd4eacb52 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 diff --git a/src/H5L.c b/src/H5L.c index ee603bfa801..ce7106f3e7f 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 bac57f2bf45..dda934a8ad2 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 0ff69100913..f2f27f4c141 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 566c4b162eb..c292b99b79b 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 76adad4db42..87580184a77 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; @@ -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 c6e051e276b..bb493df7eec 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 a30985e3058..937a4248965 100644 --- a/src/H5Tcommit.c +++ b/src/H5Tcommit.c @@ -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 3c9bdf97fcc..1b2bbe789d1 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 d12e5acc55e..51c9050c874 100644 --- a/src/H5VLint.c +++ b/src/H5VLint.c @@ -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)