summaryrefslogtreecommitdiffstats
path: root/src/H5R.c
diff options
context:
space:
mode:
authorDana Robinson <derobins@hdfgroup.org>2015-03-09 08:47:16 (GMT)
committerDana Robinson <derobins@hdfgroup.org>2015-03-09 08:47:16 (GMT)
commitce19753d87babcd578fbc9fb7b9329722e3a604c (patch)
treebefd99d086b9ad13476ba30ffd805d8f9b084bb3 /src/H5R.c
parent5b294640c003dac45c2cc489793950207bf63c8f (diff)
parent2a4ea9b24e5d28598b627fca39fb42a9baedfaa3 (diff)
downloadhdf5-ce19753d87babcd578fbc9fb7b9329722e3a604c.zip
hdf5-ce19753d87babcd578fbc9fb7b9329722e3a604c.tar.gz
hdf5-ce19753d87babcd578fbc9fb7b9329722e3a604c.tar.bz2
[svn-r26396] Merge of r26349-26392 from the trunk.
Tested on: h5committest
Diffstat (limited to 'src/H5R.c')
-rw-r--r--src/H5R.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/H5R.c b/src/H5R.c
index 26f4b9d..9b99914 100644
--- a/src/H5R.c
+++ b/src/H5R.c
@@ -411,6 +411,10 @@ done:
13 July 2011
I added the OAPL_ID parameter for the object being referenced. It only
supports dataset access property list currently.
+
+ M. Scot Breitenfeld
+ 3 March 2015
+ Added a check for undefined reference pointer.
--------------------------------------------------------------------------*/
hid_t
H5R_dereference(H5F_t *file, hid_t oapl_id, hid_t dxpl_id, H5R_type_t ref_type, const void *_ref, hbool_t app_ref)
@@ -435,8 +439,10 @@ H5R_dereference(H5F_t *file, hid_t oapl_id, hid_t dxpl_id, H5R_type_t ref_type,
switch(ref_type) {
case H5R_OBJECT:
oloc.addr = *(const hobj_ref_t *)_ref; /* Only object references currently supported */
- break;
-
+ if(!H5F_addr_defined(oloc.addr) || oloc.addr == 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Undefined reference pointer")
+ break;
+
case H5R_DATASET_REGION:
{
H5HG_t hobjid; /* Heap object ID */
@@ -448,6 +454,9 @@ H5R_dereference(H5F_t *file, hid_t oapl_id, hid_t dxpl_id, H5R_type_t ref_type,
H5F_addr_decode(oloc.file, &p, &(hobjid.addr));
UINT32DECODE(p, hobjid.idx);
+ if(!H5F_addr_defined(hobjid.addr) || hobjid.addr == 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Undefined reference pointer")
+
/* Get the dataset region from the heap (allocate inside routine) */
if(NULL == (buf = (uint8_t *)H5HG_read(oloc.file, dxpl_id, &hobjid, NULL, NULL)))
HGOTO_ERROR(H5E_REFERENCE, H5E_READERROR, FAIL, "Unable to read dataset region information")