summaryrefslogtreecommitdiffstats
path: root/src/H5Lexternal.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2013-02-27 19:22:27 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2013-02-27 19:22:27 (GMT)
commitb2f2370b1f26b8864c70f7ccc8cc023260ca99a0 (patch)
treef9bc7e59d6e48d5de16c21f48b214489d58725b3 /src/H5Lexternal.c
parente8fa6193f5ae4713f2ca9ff02965951c9d97016b (diff)
downloadhdf5-b2f2370b1f26b8864c70f7ccc8cc023260ca99a0.zip
hdf5-b2f2370b1f26b8864c70f7ccc8cc023260ca99a0.tar.gz
hdf5-b2f2370b1f26b8864c70f7ccc8cc023260ca99a0.tar.bz2
[svn-r23321] Description:
Merge r23313 from trunk to 1.8 branch: Bring changes from Coverity branch to the trunk: r20612: Changed string functions to versions with string length to fix coverity issues 922, 942 and 943. r20614: Use HDsnprintf. --gh r20675: Fix for coverity #1714 due to the fix for #810. Use HDfree() instead of H5MM_xfree(). r20678: Repaired coverity issue #598 -- failure to check return value from a call to fstat(), or to tidy up in the event of failure. r20679: Use HDstrncpy. --gh r20681: Use HDstrncat and HDstrncpy. --gh Tested on: Mac OSX/64 10.8.2 (amazon) w/debug, C++ & FORTRAN (too minor to require h5committest)
Diffstat (limited to 'src/H5Lexternal.c')
-rw-r--r--src/H5Lexternal.c47
1 files changed, 27 insertions, 20 deletions
diff --git a/src/H5Lexternal.c b/src/H5Lexternal.c
index 6a09b9e..69cc157 100644
--- a/src/H5Lexternal.c
+++ b/src/H5Lexternal.c
@@ -102,7 +102,7 @@ H5L_getenv_prefix_name(char **env_prefix/*in,out*/)
FUNC_ENTER_NOAPI_NOINIT_NOERR
- strret = HDstrchr(*env_prefix, COLON_SEPC);
+ strret = HDstrchr(*env_prefix, H5_COLON_SEPC);
if (strret == NULL) {
retptr = *env_prefix;
*env_prefix = strret;
@@ -144,14 +144,9 @@ H5L_build_name(char *prefix, char *file_name, char **full_name/*out*/)
if(NULL == (*full_name = (char *)H5MM_malloc(prefix_len + fname_len + 2)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate filename buffer")
- /* Copy the prefix into the buffer */
- HDstrcpy(*full_name, prefix);
-
- if (!CHECK_DELIMITER(prefix[prefix_len-1]))
- HDstrcat(*full_name, DIR_SEPS);
-
- /* Add the external link's filename to the prefix supplied */
- HDstrcat(*full_name, file_name);
+ /* Compose the full file name */
+ HDsnprintf(*full_name, (prefix_len + fname_len + 2), "%s%s%s", prefix,
+ (H5_CHECK_DELIMITER(prefix[prefix_len - 1]) ? "" : H5_DIR_SEPS), file_name);
done:
FUNC_LEAVE_NOAPI(ret_value)
@@ -319,24 +314,32 @@ H5L_extern_traverse(const char UNUSED *link_name, hid_t cur_group,
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
/* target file_name is an absolute pathname: see RM for detailed description */
- if(CHECK_ABSOLUTE(file_name) || CHECK_ABS_PATH(file_name)) {
+ if(H5_CHECK_ABSOLUTE(file_name) || H5_CHECK_ABS_PATH(file_name)) {
/* Try opening file */
if(NULL == (ext_file = H5F_efc_open(loc.oloc->file, file_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, H5AC_dxpl_id))) {
- char *ptr = NULL;
+ char *ptr;
H5E_clear_stack(NULL);
/* get last component of file_name */
- GET_LAST_DELIMITER(file_name, ptr)
+ H5_GET_LAST_DELIMITER(file_name, ptr)
HDassert(ptr);
- HDstrcpy(temp_file_name, ++ptr);
+
+ /* Increment past delimiter */
+ ptr++;
+
+ /* Copy into the temp. file name */
+ HDstrncpy(temp_file_name, ptr, HDstrlen(ptr) + 1);
} /* end if */
} /* end if */
- else if(CHECK_ABS_DRIVE(file_name)) {
+ else if(H5_CHECK_ABS_DRIVE(file_name)) {
+ /* Try opening file */
if(NULL == (ext_file = H5F_efc_open(loc.oloc->file, file_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, H5AC_dxpl_id))) {
+
H5E_clear_stack(NULL);
+
/* strip "<drive-letter>:" */
- HDstrcpy(temp_file_name, &file_name[2]);
+ HDstrncpy(temp_file_name, &file_name[2], (HDstrlen(file_name) - 2) + 1);
} /* end if */
} /* end if */
@@ -414,7 +417,7 @@ H5L_extern_traverse(const char UNUSED *link_name, hid_t cur_group,
HGOTO_ERROR(H5E_LINK, H5E_CANTALLOC, FAIL, "can't duplicate resolved file name string")
/* get last component of file_name */
- GET_LAST_DELIMITER(actual_file_name, ptr)
+ H5_GET_LAST_DELIMITER(actual_file_name, ptr)
if(!ptr)
HGOTO_ERROR(H5E_LINK, H5E_CANTOPENFILE, FAIL, "unable to open external file, external link file name = '%s', temp_file_name = '%s'", file_name, temp_file_name)
@@ -543,6 +546,8 @@ H5Lcreate_external(const char *file_name, const char *obj_name,
char *norm_obj_name = NULL; /* Pointer to normalized current name */
void *ext_link_buf = NULL; /* Buffer to contain external link */
size_t buf_size; /* Size of buffer to hold external link */
+ size_t file_name_len; /* Length of file name string */
+ size_t norm_obj_name_len; /* Length of normalized object name string */
uint8_t *p; /* Pointer into external link buffer */
herr_t ret_value = SUCCEED; /* Return value */
@@ -565,16 +570,18 @@ H5Lcreate_external(const char *file_name, const char *obj_name,
HGOTO_ERROR(H5E_SYM, H5E_BADVALUE, FAIL, "can't normalize object name")
/* Combine the filename and link name into a single buffer to give to the UD link */
- buf_size = 1 + (HDstrlen(file_name) + 1) + (HDstrlen(norm_obj_name) + 1);
+ file_name_len = HDstrlen(file_name) + 1;
+ norm_obj_name_len = HDstrlen(norm_obj_name) + 1;
+ buf_size = 1 + file_name_len + norm_obj_name_len;
if(NULL == (ext_link_buf = H5MM_malloc(buf_size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate udata buffer")
/* Encode the external link information */
p = (uint8_t *)ext_link_buf;
*p++ = (H5L_EXT_VERSION << 4) | H5L_EXT_FLAGS_ALL; /* External link version & flags */
- HDstrcpy((char *)p, file_name); /* Name of file containing external link's object */
- p += HDstrlen(file_name) + 1;
- HDstrcpy((char *)p, norm_obj_name); /* External link's object */
+ HDstrncpy((char *)p, file_name, file_name_len); /* Name of file containing external link's object */
+ p += file_name_len;
+ HDstrncpy((char *)p, norm_obj_name, norm_obj_name_len); /* External link's object */
/* Create an external link */
if(H5L_create_ud(&link_loc, link_name, ext_link_buf, buf_size, H5L_TYPE_EXTERNAL, lcpl_id, lapl_id, H5AC_dxpl_id) < 0)