]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
Account::slotHandleSslErrors: add guards in case the reply gets deleted in the dialog...
authorOlivier Goffart <ogoffart@woboq.com>
Tue, 29 Nov 2016 10:14:11 +0000 (11:14 +0100)
committerOlivier Goffart <olivier@woboq.com>
Wed, 14 Dec 2016 13:13:47 +0000 (14:13 +0100)
Since slotHandleSslErrors will show a dialog with an eventloop, it could be
That the reply gets deleted. Guard against that.

(#5329)

src/libsync/account.cpp

index 1b96dabf837c8a091f570329f1a70346f5a1a9a6..9b391ea78d747a8292b40c4da314b458c389841f 100644 (file)
@@ -379,8 +379,11 @@ void Account::slotHandleSslErrors(QNetworkReply *reply , QList<QSslError> errors
     // Keep a ref here on our stackframe to make sure that it doesn't get deleted before
     // handleErrors returns.
     QSharedPointer<QNetworkAccessManager> qnamLock = _am;
+    QPointer<QObject> guard = reply;
 
     if (_sslErrorHandler->handleErrors(errors, reply->sslConfiguration(), &approvedCerts, sharedFromThis())) {
+        if (!guard) return;
+
         QSslSocket::addDefaultCaCertificates(approvedCerts);
         addApprovedCerts(approvedCerts);
         emit wantsAccountSaved(this);
@@ -392,6 +395,8 @@ void Account::slotHandleSslErrors(QNetworkReply *reply , QList<QSslError> errors
         // certificate changes.
         reply->ignoreSslErrors(errors);
     } else {
+        if (!guard) return;
+
         // Mark all involved certificates as rejected, so we don't ask the user again.
         foreach (const QSslError &error, errors) {
             if (!_rejectedCertificates.contains(error.certificate())) {