From a89c9a0d855bce735116acfe147b24e386f566ba Mon Sep 17 00:00:00 2001 From: Dmitry-Me Date: Wed, 3 Feb 2016 17:34:14 +0300 Subject: [PATCH] GH614: Use memcpy()/strdup() when possible Signed-off-by: Rich Salz Reviewed-by: Kurt Roeckx --- crypto/dso/dso_dl.c | 6 ++---- crypto/dso/dso_dlfcn.c | 6 ++---- crypto/o_str.c | 6 ++++-- ssl/ssl_lib.c | 2 +- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/crypto/dso/dso_dl.c b/crypto/dso/dso_dl.c index 977e177a4a..2b56e9eba9 100644 --- a/crypto/dso/dso_dl.c +++ b/crypto/dso/dso_dl.c @@ -236,23 +236,21 @@ static char *dl_merger(DSO *dso, const char *filespec1, const char *filespec2) * if the second file specification is missing. */ if (!filespec2 || filespec1[0] == '/') { - merged = OPENSSL_malloc(strlen(filespec1) + 1); + merged = OPENSSL_strdup(filespec1); if (merged == NULL) { DSOerr(DSO_F_DL_MERGER, ERR_R_MALLOC_FAILURE); return (NULL); } - strcpy(merged, filespec1); } /* * If the first file specification is missing, the second one rules. */ else if (!filespec1) { - merged = OPENSSL_malloc(strlen(filespec2) + 1); + merged = OPENSSL_strdup(filespec2); if (merged == NULL) { DSOerr(DSO_F_DL_MERGER, ERR_R_MALLOC_FAILURE); return (NULL); } - strcpy(merged, filespec2); } else /* * This part isn't as trivial as it looks. It assumes that the diff --git a/crypto/dso/dso_dlfcn.c b/crypto/dso/dso_dlfcn.c index 8d97cfb233..b6155b141b 100644 --- a/crypto/dso/dso_dlfcn.c +++ b/crypto/dso/dso_dlfcn.c @@ -280,23 +280,21 @@ static char *dlfcn_merger(DSO *dso, const char *filespec1, * if the second file specification is missing. */ if (!filespec2 || (filespec1 != NULL && filespec1[0] == '/')) { - merged = OPENSSL_malloc(strlen(filespec1) + 1); + merged = OPENSSL_strdup(filespec1); if (merged == NULL) { DSOerr(DSO_F_DLFCN_MERGER, ERR_R_MALLOC_FAILURE); return (NULL); } - strcpy(merged, filespec1); } /* * If the first file specification is missing, the second one rules. */ else if (!filespec1) { - merged = OPENSSL_malloc(strlen(filespec2) + 1); + merged = OPENSSL_strdup(filespec2); if (merged == NULL) { DSOerr(DSO_F_DLFCN_MERGER, ERR_R_MALLOC_FAILURE); return (NULL); } - strcpy(merged, filespec2); } else { /* * This part isn't as trivial as it looks. It assumes that the diff --git a/crypto/o_str.c b/crypto/o_str.c index 269d60614b..b200060917 100644 --- a/crypto/o_str.c +++ b/crypto/o_str.c @@ -120,12 +120,14 @@ int OPENSSL_memcmp(const void *v1, const void *v2, size_t n) char *CRYPTO_strdup(const char *str, const char* file, int line) { char *ret; + size_t size; if (str == NULL) return NULL; - ret = CRYPTO_malloc(strlen(str) + 1, file, line); + size = strlen(str) + 1; + ret = CRYPTO_malloc(size, file, line); if (ret != NULL) - strcpy(ret, str); + memcpy(ret, str, size); return ret; } diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index 878ff4c1fe..1154b71ab6 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -1982,7 +1982,7 @@ char *SSL_get_shared_ciphers(const SSL *s, char *buf, int len) *p = '\0'; return buf; } - strcpy(p, c->name); + memcpy(p, c->name, n + 1); p += n; *(p++) = ':'; len -= n + 1; -- 2.25.1