diff --git a/src/rest_vol_attr.c b/src/rest_vol_attr.c index 504c1ad1..c8f741af 100644 --- a/src/rest_vol_attr.c +++ b/src/rest_vol_attr.c @@ -116,6 +116,10 @@ RV_attr_create(void *obj, const H5VL_loc_params_t *loc_params, const char *attr_ /* If this is a call to H5Acreate_by_name, locate the real parent object */ if (H5VL_OBJECT_BY_NAME == loc_params->type) { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, NULL, "invalid LAPL"); + htri_t search_ret; new_attribute->u.attribute.parent_obj_type = H5I_UNINIT; @@ -136,6 +140,12 @@ RV_attr_create(void *obj, const H5VL_loc_params_t *loc_params, const char *attr_ #endif } /* end if */ else { + if (H5VL_OBJECT_BY_IDX == loc_params->type) { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_idx.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + } + new_attribute->u.attribute.parent_obj_type = parent->obj_type; strncpy(new_attribute->u.attribute.parent_obj_URI, parent->URI, URI_MAX_LENGTH); } /* end else */ @@ -457,6 +467,11 @@ RV_attr_open(void *obj, const H5VL_loc_params_t *loc_params, const char *attr_na /* H5Aopen_by_name */ case H5VL_OBJECT_BY_NAME: { + + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, NULL, "invalid LAPL"); + htri_t search_ret; /* If this is a call to H5Aopen_by_name, locate the real object that the attribute @@ -487,6 +502,10 @@ RV_attr_open(void *obj, const H5VL_loc_params_t *loc_params, const char *attr_na /* H5Aopen_by_idx */ case H5VL_OBJECT_BY_IDX: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_idx.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, NULL, "invalid LAPL"); + htri_t search_ret; const char *request_idx_type = NULL; @@ -1260,6 +1279,10 @@ RV_attr_get(void *obj, H5VL_attr_get_args_t *args, hid_t dxpl_id, void **req) /* H5Aget_info_by_name */ case H5VL_OBJECT_BY_NAME: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + const char *attr_name = args->args.get_info.attr_name; H5I_type_t parent_obj_type = H5I_UNINIT; htri_t search_ret; @@ -1352,6 +1375,10 @@ RV_attr_get(void *obj, H5VL_attr_get_args_t *args, hid_t dxpl_id, void **req) /* H5Aget_info_by_idx */ case H5VL_OBJECT_BY_IDX: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_idx.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + H5I_type_t parent_obj_type = H5I_UNINIT; htri_t search_ret; char parent_obj_URI[URI_MAX_LENGTH]; @@ -1536,6 +1563,10 @@ RV_attr_get(void *obj, H5VL_attr_get_args_t *args, hid_t dxpl_id, void **req) /* H5Aget_name_by_idx */ case H5VL_OBJECT_BY_IDX: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_idx.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + H5I_type_t parent_obj_type = H5I_UNINIT; htri_t search_ret; char parent_obj_URI[URI_MAX_LENGTH]; @@ -1772,6 +1803,10 @@ RV_attr_specific(void *obj, const H5VL_loc_params_t *loc_params, H5VL_attr_speci /* H5Adelete_by_name */ case H5VL_OBJECT_BY_NAME: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + htri_t search_ret; attr_name = args->args.del.name; @@ -1936,6 +1971,10 @@ RV_attr_specific(void *obj, const H5VL_loc_params_t *loc_params, H5VL_attr_speci /* H5Aexists_by_name */ case H5VL_OBJECT_BY_NAME: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + htri_t search_ret; #ifdef RV_CONNECTOR_DEBUG @@ -2217,6 +2256,10 @@ RV_attr_specific(void *obj, const H5VL_loc_params_t *loc_params, H5VL_attr_speci /* H5Aiterate_by_name */ case H5VL_OBJECT_BY_NAME: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + htri_t search_ret; #ifdef RV_CONNECTOR_DEBUG diff --git a/src/rest_vol_group.c b/src/rest_vol_group.c index 4903f9ff..dbc413b6 100644 --- a/src/rest_vol_group.c +++ b/src/rest_vol_group.c @@ -513,6 +513,10 @@ RV_group_get(void *obj, H5VL_group_get_args_t *args, hid_t dxpl_id, void **req) /* H5Gget_info_by_name */ case H5VL_OBJECT_BY_NAME: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + H5I_type_t obj_type = H5I_GROUP; htri_t search_ret; char temp_URI[URI_MAX_LENGTH]; diff --git a/src/rest_vol_link.c b/src/rest_vol_link.c index a9122915..0b931ec0 100644 --- a/src/rest_vol_link.c +++ b/src/rest_vol_link.c @@ -95,6 +95,16 @@ RV_link_create(H5VL_link_create_args_t *args, void *obj, const H5VL_loc_params_t printf(" - Default LAPL? %s\n\n", (H5P_LINK_ACCESS_DEFAULT == lapl_id) ? "yes" : "no"); #endif + // TODO: Proper way to verify a plist? + if (lcpl_id == H5I_INVALID_HID) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LCPL"); + + if (loc_params->type == H5VL_OBJECT_BY_NAME && H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + + if (loc_params->type == H5VL_OBJECT_BY_IDX && H5I_INVALID_HID == loc_params->loc_data.loc_by_idx.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + /* Since the usage of the H5L_SAME_LOC macro for hard link creation may cause new_link_loc_obj to * be NULL, do some special-case handling for the Hard Link creation case */ @@ -146,6 +156,7 @@ RV_link_create(H5VL_link_create_args_t *args, void *obj, const H5VL_loc_params_t } /* H5VL_OBJECT_BY_SELF */ case H5VL_OBJECT_BY_NAME: { + H5I_type_t obj_type = H5I_UNINIT; #ifdef RV_CONNECTOR_DEBUG @@ -205,6 +216,12 @@ RV_link_create(H5VL_link_create_args_t *args, void *obj, const H5VL_loc_params_t /* H5Lcreate_soft */ case H5VL_LINK_CREATE_SOFT: { + if (loc_params->type == H5VL_OBJECT_BY_NAME && H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + + if (loc_params->type == H5VL_OBJECT_BY_IDX && H5I_INVALID_HID == loc_params->loc_data.loc_by_idx.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + const char *link_target = args->args.soft.target; #ifdef RV_CONNECTOR_DEBUG @@ -474,6 +491,10 @@ RV_link_get(void *obj, const H5VL_loc_params_t *loc_params, H5VL_link_get_args_t switch (loc_params->type) { /* H5Lget_info */ case H5VL_OBJECT_BY_NAME: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + /* In case the user specified a path which contains any groups on the way to the * link in question, extract out the path to the final group in the chain */ if (NULL == (link_dir_name = H5_rest_dirname(loc_params->loc_data.loc_by_name.name))) @@ -677,6 +698,10 @@ RV_link_get(void *obj, const H5VL_loc_params_t *loc_params, H5VL_link_get_args_t switch (loc_params->type) { /* H5Lget_val */ case H5VL_OBJECT_BY_NAME: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + /* In case the user specified a path which contains any groups on the way to the * link in question, extract out the path to the final group in the chain */ if (NULL == (link_dir_name = H5_rest_dirname(loc_params->loc_data.loc_by_name.name))) @@ -849,6 +874,10 @@ RV_link_specific(void *obj, const H5VL_loc_params_t *loc_params, H5VL_link_speci switch (loc_params->type) { /* H5Ldelete */ case H5VL_OBJECT_BY_NAME: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + /* In case the user specified a path which contains multiple groups on the way to the * link in question, extract out the path to the final group in the chain */ if (NULL == (link_path_dirname = H5_rest_dirname(loc_params->loc_data.loc_by_name.name))) @@ -1064,6 +1093,10 @@ RV_link_specific(void *obj, const H5VL_loc_params_t *loc_params, H5VL_link_speci /* H5Literate_by_name/H5Lvisit_by_name */ case H5VL_OBJECT_BY_NAME: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + #ifdef RV_CONNECTOR_DEBUG printf("-> Opening group for link iteration to generate an hid_t and work around VOL " "layer\n\n"); diff --git a/src/rest_vol_object.c b/src/rest_vol_object.c index 9c7532a6..707d1849 100644 --- a/src/rest_vol_object.c +++ b/src/rest_vol_object.c @@ -84,6 +84,10 @@ RV_object_open(void *obj, const H5VL_loc_params_t *loc_params, H5I_type_t *opene switch (loc_params->type) { /* H5Oopen */ case H5VL_OBJECT_BY_NAME: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, NULL, "invalid LAPL"); + htri_t search_ret; /* Retrieve the type of object being dealt with by querying the server */ @@ -370,6 +374,10 @@ RV_object_get(void *obj, const H5VL_loc_params_t *loc_params, H5VL_object_get_ar /* H5Oget_info_by_name */ case H5VL_OBJECT_BY_NAME: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + htri_t search_ret; char temp_URI[URI_MAX_LENGTH]; @@ -464,6 +472,10 @@ RV_object_get(void *obj, const H5VL_loc_params_t *loc_params, H5VL_object_get_ar /* H5Oget_info_by_idx */ case H5VL_OBJECT_BY_IDX: { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_idx.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + htri_t search_ret; char temp_URI[URI_MAX_LENGTH]; const char *request_idx_type = NULL; @@ -844,6 +856,10 @@ RV_object_specific(void *obj, const H5VL_loc_params_t *loc_params, H5VL_object_s } /* end H5Ovisit H5VL_OBJECT_BY_SELF */ case (H5VL_OBJECT_BY_NAME): { + // TODO: Proper way to verify a plist? + if (H5I_INVALID_HID == loc_params->loc_data.loc_by_name.lapl_id) + FUNC_GOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "invalid LAPL"); + /* Make a request to figure out how to open iter object, set header string, * and iter object type */ if (RV_find_object_by_path(loc_obj, loc_params->loc_data.loc_by_name.name,