Thiago,

This is an extension of the bug you fixed a while back, before the
sslConfiguration() returned a null object during the sslErrors signal
processing. Now it is null during the finished() signal processing.

The code below highlights this problem, tested in daily snapshot 4.4.1-20080412

/* main.h */
#include <QtCore>
#include <QtNetwork>

class TestApplication : public QObject {
        Q_OBJECT;

        QApplication* m_app;

public:
        TestApplication(int &argc, char* argv[]);
        ~TestApplication();

signals:

public slots:
        void finished();
        void sslErrors(const QList<QSslError>&);
        void networkError(QNetworkReply::NetworkError);

public:
        int run();

};

/* main.cpp */
#include "main.h"

#include <QtCore>
#include <QtNetwork>

QString certdata =
"-----BEGIN CERTIFICATE-----\n"
"MIIEDTCCA3agAwIBAgIJAJ3brkGYSP/RMA0GCSqGSIb3DQEBBQUAMIG2MQswCQYD\n"
"VQQGEwJVSzESMBAGA1UECBMJSGFtcHNoaXJlMRQwEgYDVQQHEwtTb3V0aGFtcHRv\n"
"bjEiMCAGA1UEChMZVW5pdmVyc2l0eSBvZiBTb3V0aGFtcHRvbjEpMCcGA1UECxMg\n"
"RWxlY3Ryb25pY3MgYW5kIENvbXB1dGVyIFNjaWVuY2UxDjAMBgNVBAMTBUp1YmFs\n"
"MR4wHAYJKoZIhvcNAQkBFg9qdWJhbEByc2Rzcy5uZXQwHhcNMDgwMzE4MTQzNTU1\n"
"WhcNMDkwMzE4MTQzNTU1WjCBtjELMAkGA1UEBhMCVUsxEjAQBgNVBAgTCUhhbXBz\n"
"aGlyZTEUMBIGA1UEBxMLU291dGhhbXB0b24xIjAgBgNVBAoTGVVuaXZlcnNpdHkg\n"
"b2YgU291dGhhbXB0b24xKTAnBgNVBAsTIEVsZWN0cm9uaWNzIGFuZCBDb21wdXRl\n"
"ciBTY2llbmNlMQ4wDAYDVQQDEwVKdWJhbDEeMBwGCSqGSIb3DQEJARYPanViYWxA\n"
"cnNkc3MubmV0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC51Mxtwl9WiU4l\n"
"UIDMOvFHryIcClOVUb1snWCN1ai5k3imcJeT/bgf39se4rhFxS1s1JvOV3q7dYPY\n"
"sPZwdSjdJRLKZTHmfygmV9iL85Rv3+MOXmx0gbGo3VS1Laty9WJDokT0lrMLrCfw\n"
"5fgR8bHY8eOEf8l64rQeV3tvYhz/NwIDAQABo4IBHzCCARswHQYDVR0OBBYEFPxp\n"
"RERJ6YB8nlbOzq5hA/z7GmJGMIHrBgNVHSMEgeMwgeCAFPxpRERJ6YB8nlbOzq5h\n"
"A/z7GmJGoYG8pIG5MIG2MQswCQYDVQQGEwJVSzESMBAGA1UECBMJSGFtcHNoaXJl\n"
"MRQwEgYDVQQHEwtTb3V0aGFtcHRvbjEiMCAGA1UEChMZVW5pdmVyc2l0eSBvZiBT\n"
"b3V0aGFtcHRvbjEpMCcGA1UECxMgRWxlY3Ryb25pY3MgYW5kIENvbXB1dGVyIFNj\n"
"aWVuY2UxDjAMBgNVBAMTBUp1YmFsMR4wHAYJKoZIhvcNAQkBFg9qdWJhbEByc2Rz\n"
"cy5uZXSCCQCd265BmEj/0TAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GB\n"
"ABdkFyUfwJFnzY7UWeXWRXzWEqoEBxDBFDJ1H+ArHGCTdEURyfHND7tzxtNq8awA\n"
"lfwdAIFvOwaHlbmKT7Sa1nazGVzUR0x+Anq7ng2M7Z3Qbebkv5ifYzHQiCYmak/a\n"
"HHHIW4NbEdaJfx6dAdutBD2oyJLYDK3h/iPsoOg82uWh\n"
"-----END CERTIFICATE-----\n";

QString keydata =
"-----BEGIN RSA PRIVATE KEY-----\n"
"MIICXAIBAAKBgQC51Mxtwl9WiU4lUIDMOvFHryIcClOVUb1snWCN1ai5k3imcJeT\n"
"/bgf39se4rhFxS1s1JvOV3q7dYPYsPZwdSjdJRLKZTHmfygmV9iL85Rv3+MOXmx0\n"
"gbGo3VS1Laty9WJDokT0lrMLrCfw5fgR8bHY8eOEf8l64rQeV3tvYhz/NwIDAQAB\n"
"AoGATUYDzBBrfJyT9khHhqVr95cH5AkXQJxA3I2EvPX/t0tvfCaNoWh7zCVWBL3a\n"
"Soj3nq26LE+MJa90KANONu1BFB4LtJhjgMGnqQ0V5t/Te384FF5VqLJbmx2fyS1L\n"
"tk4vGdFc6yxE1qgMDLJSldBT5YSutN7xjAc+dhMohMazpwECQQDytZpKp/v2Hefh\n"
"sSidCcPMD3rHgld7kEXok/CRne4hAsVPzDQrl23EUy9ntfIWRPLpJw6Zkqjqqnif\n"
"DYrD7zNXAkEAxAHa9RNHyUCNZmtv6NZkgkOXll6RboyTJ01Pg9iUQVP1NK+4GmVs\n"
"thf4jmKDVDayoDMlZcwA5JaBJP9PTSAHIQJABrmxhNAS00cQ3dgi3/cdTdI//LdH\n"
"5UyiI0e2KtLNfmytOwDVkT+o8v+7GIyaILPYZ02FwgumUppWrVGavsMqEQJBALaU\n"
"H9iAADN4XP6Vf2X9JxysR6z7JC885OoMOtBO0zLTOSq9sBludshcJdzD6R9t4BAX\n"
"9HMRh5dmlp/W7pCiD+ECQDhrkL1wCBJ5E299QrWrrUTmZKu8CvCxXpx0T+Uzk8r9\n"
"lHIt/M3ryrdw4ElI7rEje60IxhpuK00yTOT5DY7Feac=\n"
"-----END RSA PRIVATE KEY-----\n";


int main(int argc, char* argv[]) {
        TestApplication app(argc, argv);
        return app.run();
}

TestApplication::TestApplication(int &argc, char* argv[]) : QObject() {
        m_app = new QApplication(argc, argv);
}

TestApplication::~TestApplication() {
        delete m_app;
}

int TestApplication::run() {
        QSslConfiguration sslConfiguration;
        sslConfiguration.setLocalCertificate(QSslCertificate(certdata.toUtf8(),
QSsl::Pem));
        sslConfiguration.setPrivateKey(QSslKey(keydata.toUtf8(), QSsl::Rsa,
QSsl::Pem, QSsl::PrivateKey));

        QNetworkAccessManager nam;

        QNetworkRequest request(QUrl("https://secure.ecs.soton.ac.uk";));
        request.setSslConfiguration(sslConfiguration);
        QNetworkReply* reply = nam.get(request);
        connect(reply, SIGNAL(finished()), SLOT(finished()));
        connect(reply, SIGNAL(sslErrors(const QList<QSslError>&)),
SLOT(sslErrors(const QList<QSslError>&)));
        connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
SLOT(networkError(QNetworkReply::NetworkError)));

        return m_app->exec();
}

void TestApplication::finished() {
        qDebug() << "Request complete";
        QNetworkReply* networkReply = 
qobject_cast<QNetworkReply*>(this->sender());
        Q_ASSERT(networkReply);

        QSslConfiguration sslConfiguration = networkReply->sslConfiguration();  
        qDebug() << "SslConfiguration is null?" << sslConfiguration.isNull();
        // Prints "true"
        // New bug?
}

void TestApplication::sslErrors(const QList<QSslError>& errors) {
        qDebug() << errors;
        QNetworkReply* networkReply = 
qobject_cast<QNetworkReply*>(this->sender());
        Q_ASSERT(networkReply);

        QSslConfiguration sslConfiguration = networkReply->sslConfiguration();  
        qDebug() << "SslConfiguration is null?" << sslConfiguration.isNull();
        // Prints "false"
        // Bug now fixed
}

void TestApplication::networkError(QNetworkReply::NetworkError error) {
        qDebug() << error;
}

To unsubscribe - send "unsubscribe" in the subject to [EMAIL PROTECTED]

Reply via email to