summaryrefslogtreecommitdiffstats
path: root/src/H5Glink.c
diff options
context:
space:
mode:
authorVailin Choi <vchoi@jam.ad.hdfgroup.org>2017-08-23 21:23:09 (GMT)
committerVailin Choi <vchoi@jam.ad.hdfgroup.org>2017-08-23 21:23:09 (GMT)
commit1ef8577a4aaaa4120a819ff36747fdca99abdc26 (patch)
treef360f1e27e145cb82608eb11079c9aff876d0984 /src/H5Glink.c
parentb07eb6efd06bbe44562fe6c93e826f40a56c01d2 (diff)
downloadhdf5-1ef8577a4aaaa4120a819ff36747fdca99abdc26.zip
hdf5-1ef8577a4aaaa4120a819ff36747fdca99abdc26.tar.gz
hdf5-1ef8577a4aaaa4120a819ff36747fdca99abdc26.tar.bz2
Modifications based on comments from pull request review
(1) Remove unnecessary asserts (2) Add code to insert bad offset values to the test file in gen_bad_offset.c
Diffstat (limited to 'src/H5Glink.c')
-rw-r--r--src/H5Glink.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/H5Glink.c b/src/H5Glink.c
index 77b69cb..e199f89 100644
--- a/src/H5Glink.c
+++ b/src/H5Glink.c
@@ -224,6 +224,7 @@ herr_t
H5G__ent_to_link(H5O_link_t *lnk, const H5HL_t *heap,
const H5G_entry_t *ent, const char *name)
{
+ hbool_t dup_soft = FALSE; /* xstrdup the symbolic link name or not */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
@@ -238,19 +239,21 @@ H5G__ent_to_link(H5O_link_t *lnk, const H5HL_t *heap,
lnk->cset = H5F_DEFAULT_CSET;
lnk->corder = 0;
lnk->corder_valid = FALSE; /* Creation order not valid for this link */
- lnk->name = H5MM_xstrdup(name);
- HDassert(lnk->name);
+ if((lnk->name = H5MM_xstrdup(name)) == NULL)
+ HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "unable to duplicate link name")
/* Object is a symbolic or hard link */
if(ent->type == H5G_CACHED_SLINK) {
const char *s; /* Pointer to link value */
if((s = (const char *)H5HL_offset_into(heap, ent->cache.slink.lval_offset)) == NULL)
- HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "unable to get link name")
- HDassert(s);
+ HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "unable to get symbolic link name")
/* Copy the link value */
- lnk->u.soft.name = H5MM_xstrdup(s);
+ if((lnk->u.soft.name = H5MM_xstrdup(s)) == NULL)
+ HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "unable to duplicate symbolic link name")
+
+ dup_soft = TRUE;
/* Set link type */
lnk->type = H5L_TYPE_SOFT;
@@ -264,8 +267,12 @@ H5G__ent_to_link(H5O_link_t *lnk, const H5HL_t *heap,
} /* end else */
done:
- if(ret_value < 0 && lnk->name)
- H5MM_xfree(lnk->name);
+ if(ret_value < 0) {
+ if(lnk->name)
+ H5MM_xfree(lnk->name);
+ if(ent->type == H5G_CACHED_SLINK && dup_soft)
+ H5MM_xfree(lnk->u.soft.name);
+ }
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5G__ent_to_link() */