From 2fae4fbfa629c1bfbeeb31d6b6a403528f1426d9 Mon Sep 17 00:00:00 2001 From: Scot Breitenfeld Date: Sun, 9 Sep 2012 14:08:12 -0500 Subject: [svn-r22746] Description: Fix for HDFFV-7959 H5Rdereference should check for default (HADDR_UNDEF) value and not continue processing and return so that ret value can be checked and handled properly. Added fix and test, reviewed: Tested: jam (gnu, intel) --- src/H5R.c | 4 ++++ test/trefer.c | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/H5R.c b/src/H5R.c index d45947b..f34980e 100644 --- a/src/H5R.c +++ b/src/H5R.c @@ -568,6 +568,7 @@ H5Rdereference2(hid_t obj_id, hid_t oapl_id, H5R_type_t ref_type, const void *_r { H5G_loc_t loc; /* Group location */ H5F_t *file = NULL; /* File object */ + haddr_t addr; hid_t ret_value; FUNC_ENTER_API(FAIL) @@ -582,6 +583,9 @@ H5Rdereference2(hid_t obj_id, hid_t oapl_id, H5R_type_t ref_type, const void *_r HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid reference type") if(_ref == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid reference pointer") + addr = *((const haddr_t*)_ref); + if(!H5F_addr_defined(addr)) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "undefined reference pointer") /* Get the file pointer from the entry */ file = loc.oloc->file; diff --git a/test/trefer.c b/test/trefer.c index 53f7b92..848e060 100644 --- a/test/trefer.c +++ b/test/trefer.c @@ -1069,6 +1069,7 @@ test_reference_obj_deleted(void) hid_t sid1; /* Dataspace ID */ hobj_ref_t oref; /* Object Reference to test */ H5O_type_t obj_type; /* Object type */ + haddr_t addr = HADDR_UNDEF; /* test for undefined reference */ herr_t ret; /* Generic return value */ /* Create file */ @@ -1126,6 +1127,10 @@ test_reference_obj_deleted(void) dataset = H5Dopen2(fid1, "/Dataset2", H5P_DEFAULT); CHECK(ret, FAIL, "H5Dopen2"); + /* Open undefined reference */ + dset2 = H5Rdereference2(dataset, H5P_DEFAULT, H5R_OBJECT, &addr); + VERIFY(dset2, FAIL, "H5Rdereference2"); + /* Read selection from disk */ HDmemset(&oref, 0, sizeof(hobj_ref_t)); ret = H5Dread(dataset, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL, H5P_DEFAULT, &oref); -- cgit v0.12