summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRaymond Lu <songyulu@hdfgroup.org>2009-04-01 22:02:44 (GMT)
committerRaymond Lu <songyulu@hdfgroup.org>2009-04-01 22:02:44 (GMT)
commit9e148522d5d15eb5dad1bb823970c940a1419603 (patch)
treea9f07b14178ae3254862bcafc736621e2ba26068 /src
parentdf24309b72768054a6b6c1cdaacc7b7c4a660e8f (diff)
downloadhdf5-9e148522d5d15eb5dad1bb823970c940a1419603.zip
hdf5-9e148522d5d15eb5dad1bb823970c940a1419603.tar.gz
hdf5-9e148522d5d15eb5dad1bb823970c940a1419603.tar.bz2
[svn-r16652] Bug fix #1503 - H5Iget_type failed unexpected when an invalid ID was passed in. I put
some argument check in the internal function H5I_find_id and took out the assertion check. I also removed the argument check in H5Iis_valid because it's in H5I_find_id now. Tested on jam and linew - simple change.
Diffstat (limited to 'src')
-rw-r--r--src/H5I.c38
1 files changed, 19 insertions, 19 deletions
diff --git a/src/H5I.c b/src/H5I.c
index c6fcb17..14dbb1f 100644
--- a/src/H5I.c
+++ b/src/H5I.c
@@ -1848,39 +1848,34 @@ done:
* Function: H5Iis_valid
*
* Purpose: Check if the given id is valid. And id is valid if it is in
- * use and has an application reference count of at least 1.
+ * use and has an application reference count of at least 1.
*
- * Return: Success: TRUE if the id is valid, FALSE otherwise.
+ * Return: Success: TRUE if the id is valid, FALSE otherwise.
*
- * Failure: Negative (never fails currently)
+ * Failure: Negative (never fails currently)
*
* Programmer: Neil Fortner
* Friday, October 31, 2008 (boo)
*
+ * Modifications:
+ * Raymond Lu
+ * 1 April 2009 (Believe it or not!)
+ * Moved the argument check down to H5I_find_id because other
+ * caller functions may pass in some invalid IDs to H5I_find_id.
+ * It used to do assertion check.
*-------------------------------------------------------------------------
*/
htri_t
H5Iis_valid(hid_t id)
{
- H5I_id_type_t *type_ptr; /* ptr to ID's type */
H5I_id_info_t *id_ptr; /* ptr to the ID */
- H5I_type_t type; /* ID's type */
htri_t ret_value = TRUE; /* Return value */
FUNC_ENTER_API(H5Iis_valid, FAIL)
H5TRACE1("t", "i", id);
- type = H5I_TYPE(id);
- /* Check for conditions that would cause H5I_find_id to throw an assertion */
- if (type <= H5I_BADID || type >= H5I_next_type)
- HGOTO_DONE(FALSE);
-
- type_ptr = H5I_id_type_list_g[type];
- if (!type_ptr || type_ptr->count <= 0)
- ret_value = FALSE;
-
/* Find the ID */
- else if (NULL == (id_ptr = H5I_find_id(id)))
+ if (NULL == (id_ptr = H5I_find_id(id)))
ret_value = FALSE;
/* Check if the found id is an internal id */
@@ -2012,7 +2007,9 @@ done:
* Programmer:
*
* Modifications:
- *
+ * Raymond Lu
+ * 1 April 2009 (Believe it or not!)
+ * Added argument check, took away assertion check.
*-------------------------------------------------------------------------
*/
static H5I_id_info_t *
@@ -2029,10 +2026,12 @@ H5I_find_id(hid_t id)
/* Check arguments */
type = H5I_TYPE(id);
- HDassert(type > H5I_BADID && type < H5I_next_type);
- type_ptr = H5I_id_type_list_g[type];
+ if (type <= H5I_BADID || type >= H5I_next_type)
+ HGOTO_DONE(NULL);
- HDassert(type_ptr && type_ptr->count > 0);
+ type_ptr = H5I_id_type_list_g[type];
+ if (!type_ptr || type_ptr->count <= 0)
+ HGOTO_DONE(NULL);
/* Get the bucket in which the ID is located */
hash_loc = (unsigned)H5I_LOC(id, type_ptr->hash_size);
@@ -2057,6 +2056,7 @@ H5I_find_id(hid_t id)
/* Set the return value */
ret_value = id_ptr;
+done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5I_find_id() */