diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2005-04-16 16:22:22 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2005-04-16 16:22:22 (GMT) |
commit | bbeca0723250c5cd66eba974a81375142a0cfe2d (patch) | |
tree | 245d59ff2e2c71b0ae0ca8fd5605b1c029696c14 /src | |
parent | 9a14290d3059f1ad70655647977ed56254ee90ae (diff) | |
download | hdf5-bbeca0723250c5cd66eba974a81375142a0cfe2d.zip hdf5-bbeca0723250c5cd66eba974a81375142a0cfe2d.tar.gz hdf5-bbeca0723250c5cd66eba974a81375142a0cfe2d.tar.bz2 |
[svn-r10621] Purpose:
Bug fix
Description:
Opening a dataset (or named datatype) with "." for the name and using a
group ID for the location ID was not returning an error value.
Solution:
Check the type of the object before attempting to open it (internally,
using a group ID and "." for the name maps to the group object).
Platforms tested:
FreeBSD 4.11 (sleipnir)
Solaris 2.9 (shanti)
Too minor to require h5committest
Diffstat (limited to 'src')
-rw-r--r-- | src/H5D.c | 14 | ||||
-rw-r--r-- | src/H5T.c | 4 |
2 files changed, 15 insertions, 3 deletions
@@ -1125,7 +1125,7 @@ done: hid_t H5Dopen(hid_t loc_id, const char *name) { - H5D_t *dset; + H5D_t *dset = NULL; H5G_entry_t *loc = NULL; /*location holding the dataset */ H5G_entry_t ent; /*dataset symbol table entry */ hid_t dxpl_id = H5AC_dxpl_id; /* dxpl to use to open datset */ @@ -1144,6 +1144,10 @@ H5Dopen(hid_t loc_id, const char *name) if (H5G_find(loc, name, NULL, &ent, dxpl_id) < 0) HGOTO_ERROR(H5E_DATASET, H5E_NOTFOUND, FAIL, "not found") + /* Check that the object found is the correct type */ + if (H5G_get_type(&ent, dxpl_id) != H5G_DATASET) + HGOTO_ERROR(H5E_DATASET, H5E_BADTYPE, FAIL, "not a dataset") + /* Open the dataset */ if ((dset = H5D_open(&ent, dxpl_id))==NULL) HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't open dataset") @@ -1153,6 +1157,10 @@ H5Dopen(hid_t loc_id, const char *name) HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "can't register dataset atom") done: + if(ret_value < 0) + if(dset != NULL) + if(H5D_close(dset) < 0) + HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release dataset") FUNC_LEAVE_API(ret_value) } @@ -2306,10 +2314,10 @@ done: HDONE_ERROR(H5E_DATASET, H5E_CANTDEC, NULL, "unable to decrement ref count on property list") } /* end if */ H5FL_FREE(H5D_shared_t,new_dset->shared); - } + } /* end if */ new_dset->ent.file = NULL; H5FL_FREE(H5D_t, new_dset); - } + } /* end if */ FUNC_LEAVE_NOAPI(ret_value) } /* end H5D_create() */ @@ -1414,6 +1414,10 @@ H5Topen(hid_t loc_id, const char *name) if (H5G_find (loc, name, NULL, &ent/*out*/, dxpl_id)<0) HGOTO_ERROR (H5E_DATATYPE, H5E_NOTFOUND, FAIL, "not found"); + /* Check that the object found is the correct type */ + if (H5G_get_type(&ent, dxpl_id) != H5G_TYPE) + HGOTO_ERROR(H5E_DATASET, H5E_BADTYPE, FAIL, "not a named datatype") + /* Open it */ if ((type=H5T_open (&ent, dxpl_id)) ==NULL) HGOTO_ERROR (H5E_DATATYPE, H5E_CANTOPENOBJ, FAIL, "unable to open named data type"); |