From 2e271795e7c460254a27ea617846ff7b598a7b9b Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Mon, 1 Dec 2014 19:36:36 +0100 Subject: QSslEllipticCurve: remove a copy when setting the curves The only reason for copying QSslEllipticCurves into a temporary array would be to be extra-pedantic about type safety, but in the end, we can simply force a cast and remove the copy. Change-Id: Ice8a036fe4b79ba438ce83b5eacf6158eb3f0ce7 Reviewed-by: Richard J. Moore --- src/network/ssl/qsslcontext_openssl.cpp | 11 ++++++----- src/network/ssl/qsslellipticcurve.h | 1 - 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src/network') diff --git a/src/network/ssl/qsslcontext_openssl.cpp b/src/network/ssl/qsslcontext_openssl.cpp index c1d09dce44..60573c4c83 100644 --- a/src/network/ssl/qsslcontext_openssl.cpp +++ b/src/network/ssl/qsslcontext_openssl.cpp @@ -340,11 +340,12 @@ init_context: #if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC) // Set the curves to be used if (q_SSLeay() >= 0x10002000L) { - QVarLengthArray curves; - foreach (const QSslEllipticCurve curve, qcurves) - curves.append(curve.id); - - if (!q_SSL_CTX_ctrl(sslContext->ctx, SSL_CTRL_SET_CURVES, curves.size(), curves.data())) { + // SSL_CTX_ctrl wants a non-const pointer as last argument, + // but let's avoid a copy into a temporary array + if (!q_SSL_CTX_ctrl(sslContext->ctx, + SSL_CTRL_SET_CURVES, + qcurves.size(), + const_cast(reinterpret_cast(qcurves.data())))) { sslContext->errorStr = QSslSocket::tr("Error when setting the elliptic curves (%1)").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl()); sslContext->errorCode = QSslError::UnspecifiedError; return sslContext; diff --git a/src/network/ssl/qsslellipticcurve.h b/src/network/ssl/qsslellipticcurve.h index 8f31b32777..6d2a764d87 100644 --- a/src/network/ssl/qsslellipticcurve.h +++ b/src/network/ssl/qsslellipticcurve.h @@ -82,7 +82,6 @@ private: friend Q_DECL_CONSTEXPR uint qHash(QSslEllipticCurve curve, uint seed) Q_DECL_NOTHROW { return qHash(curve.id, seed); } - friend class QSslContext; friend class QSslSocketPrivate; friend class QSslSocketBackendPrivate; }; -- cgit v1.2.3