Skip to content

Commit

Permalink
Fix invalid LAPL/LCPL not raising error
Browse files Browse the repository at this point in the history
  • Loading branch information
mattjala committed Jul 3, 2023
1 parent d656048 commit fcd1a77
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 0 deletions.
43 changes: 43 additions & 0 deletions src/rest_vol_attr.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 */
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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];
Expand Down Expand Up @@ -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];
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions src/rest_vol_group.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
33 changes: 33 additions & 0 deletions src/rest_vol_link.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)))
Expand Down Expand Up @@ -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)))
Expand Down Expand Up @@ -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)))
Expand Down Expand Up @@ -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");
Expand Down
16 changes: 16 additions & 0 deletions src/rest_vol_object.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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];

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit fcd1a77

Please sign in to comment.