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]