From 4cacc9d510c20368d13dcaf2c95c25d6d1ceef6c Mon Sep 17 00:00:00 2001 From: Pauli Date: Tue, 12 Sep 2017 09:13:00 +1000 Subject: [PATCH] Revert "GH614: Use memcpy()/strdup() when possible" This reverts commit a89c9a0d855bce735116acfe147b24e386f566ba. Reviewed-by: Rich Salz Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/4357) --- 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, 11 insertions(+), 9 deletions(-) diff --git a/crypto/dso/dso_dl.c b/crypto/dso/dso_dl.c index d80bf562c7..af968e3ead 100644 --- a/crypto/dso/dso_dl.c +++ b/crypto/dso/dso_dl.c @@ -156,21 +156,23 @@ 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_strdup(filespec1); + merged = OPENSSL_malloc(strlen(filespec1) + 1); 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_strdup(filespec2); + merged = OPENSSL_malloc(strlen(filespec2) + 1); 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 a4b0cdd95b..e2aa76eb65 100644 --- a/crypto/dso/dso_dlfcn.c +++ b/crypto/dso/dso_dlfcn.c @@ -196,21 +196,23 @@ static char *dlfcn_merger(DSO *dso, const char *filespec1, * if the second file specification is missing. */ if (!filespec2 || (filespec1 != NULL && filespec1[0] == '/')) { - merged = OPENSSL_strdup(filespec1); + merged = OPENSSL_malloc(strlen(filespec1) + 1); 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_strdup(filespec2); + merged = OPENSSL_malloc(strlen(filespec2) + 1); 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 cf098fc90a..a8357691ad 100644 --- a/crypto/o_str.c +++ b/crypto/o_str.c @@ -27,14 +27,12 @@ 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; - size = strlen(str) + 1; - ret = CRYPTO_malloc(size, file, line); + ret = CRYPTO_malloc(strlen(str) + 1, file, line); if (ret != NULL) - memcpy(ret, str, size); + strcpy(ret, str); return ret; } diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index a909a57eb8..a3c5151119 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -2471,7 +2471,7 @@ char *SSL_get_shared_ciphers(const SSL *s, char *buf, int len) *p = '\0'; return buf; } - memcpy(p, c->name, n + 1); + strcpy(p, c->name); p += n; *(p++) = ':'; len -= n + 1; -- 2.39.2