From 1cc2a70b2a8b91d243c2e4ac4e779efd950db5a2 Mon Sep 17 00:00:00 2001 From: djm <> Date: Sat, 6 Sep 2008 12:20:16 +0000 Subject: remerge local tweaks, update per-arch configuration headers, update Makefiles, crank shlib_version --- src/lib/libcrypto/dso/dso_dlfcn.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/lib/libcrypto/dso/dso_dlfcn.c') diff --git a/src/lib/libcrypto/dso/dso_dlfcn.c b/src/lib/libcrypto/dso/dso_dlfcn.c index f734c1c6b7..656cd496f8 100644 --- a/src/lib/libcrypto/dso/dso_dlfcn.c +++ b/src/lib/libcrypto/dso/dso_dlfcn.c @@ -269,6 +269,7 @@ static char *dlfcn_merger(DSO *dso, const char *filespec1, const char *filespec2) { char *merged; + size_t len; if(!filespec1 && !filespec2) { @@ -280,18 +281,20 @@ static char *dlfcn_merger(DSO *dso, const char *filespec1, same goes if the second file specification is missing. */ if (!filespec2 || filespec1[0] == '/') { - merged = OPENSSL_malloc(strlen(filespec1) + 1); + len = strlen(filespec1) + 1; + merged = OPENSSL_malloc(len); if(!merged) { DSOerr(DSO_F_DLFCN_MERGER, ERR_R_MALLOC_FAILURE); return(NULL); } - strcpy(merged, filespec1); + strlcpy(merged, filespec1, len); } /* If the first file specification is missing, the second one rules. */ else if (!filespec1) { + len = strlen(filespec2) + 1; merged = OPENSSL_malloc(strlen(filespec2) + 1); if(!merged) { @@ -299,7 +302,7 @@ static char *dlfcn_merger(DSO *dso, const char *filespec1, ERR_R_MALLOC_FAILURE); return(NULL); } - strcpy(merged, filespec2); + strlcpy(merged, filespec2, len); } else /* This part isn't as trivial as it looks. It assumes that @@ -325,9 +328,9 @@ static char *dlfcn_merger(DSO *dso, const char *filespec1, ERR_R_MALLOC_FAILURE); return(NULL); } - strcpy(merged, filespec2); + strlcpy(merged, filespec2, len + 2); merged[spec2len] = '/'; - strcpy(&merged[spec2len + 1], filespec1); + strlcpy(&merged[spec2len + 1], filespec1, len + 1 - spec2len); } return(merged); } -- cgit v1.2.3-55-g6feb