From d1bbab226ed859a2a2bf595df49ca8083d936d6b Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Thu, 8 Jul 2010 11:42:59 +0200 Subject: Add exception barrier to QCertificateRetriever::RunL() This translates stl exceptions into Symbian OS Leaves, to prevent an assertion failure in the active scheduler. Reviewed-by: mread (cherry picked from commit 4f8ec542b123399574d2e509fa99f4bd66a34e25) --- src/network/ssl/qsslsocket_openssl.cpp | 11 ++++++++--- src/network/ssl/qsslsocket_openssl_p.h | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index b6bcb30..3174501 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -199,7 +199,7 @@ QSslCipher QSslSocketBackendPrivate::QSslCipher_from_SSL_CIPHER(SSL_CIPHER *ciph ciph.d->protocol = QSsl::SslV2; else if (protoString == QLatin1String("TLSv1")) ciph.d->protocol = QSsl::TlsV1; - + if (descriptionList.at(2).startsWith(QLatin1String("Kx="))) ciph.d->keyExchangeMethod = descriptionList.at(2).mid(3); if (descriptionList.at(3).startsWith(QLatin1String("Au="))) @@ -367,7 +367,7 @@ init_context: // Set verification depth. if (configuration.peerVerifyDepth != 0) q_SSL_CTX_set_verify_depth(ctx, configuration.peerVerifyDepth); - + // Create and initialize SSL session if (!(ssl = q_SSL_new(ctx))) { // ### Bad error code @@ -616,6 +616,11 @@ void QCertificateRetriever::retrieveNextCertificate() void QCertificateRetriever::RunL() { + QT_TRYCATCH_LEAVING(run()); +} + +void QCertificateRetriever::run() +{ switch (state) { case Initializing: list(); @@ -818,7 +823,7 @@ void QSslSocketBackendPrivate::transmit() bool transmitting; do { transmitting = false; - + // If the connection is secure, we can transfer data from the write // buffer (in plain text) to the write BIO through SSL_write. if (connectionEncrypted && !writeBuffer.isEmpty()) { diff --git a/src/network/ssl/qsslsocket_openssl_p.h b/src/network/ssl/qsslsocket_openssl_p.h index 7e1035b..ca377d9 100644 --- a/src/network/ssl/qsslsocket_openssl_p.h +++ b/src/network/ssl/qsslsocket_openssl_p.h @@ -162,6 +162,7 @@ private: virtual void RunL(); virtual void DoCancel(); + void run(); void list(); void retrieveNextCertificate(); -- cgit v0.12