Sockets: Fix potential null pointer usages
QAbstractSocketEngine::createSocketEngine can return 0 as well as throw. In two cases the pointer was being used before the null check, in a 3rd case the null check was missing. Reviewed-by: Markus Goetz (cherry picked from commit 19edac88af53eea7f733cabbaee77f9b725b7ea9)
This commit is contained in:
parent
10646142ae
commit
119da2c8d4
@ -547,15 +547,15 @@ bool QAbstractSocketPrivate::initSocketLayer(QAbstractSocket::NetworkLayerProtoc
|
|||||||
|
|
||||||
resetSocketLayer();
|
resetSocketLayer();
|
||||||
socketEngine = QAbstractSocketEngine::createSocketEngine(q->socketType(), proxyInUse, q);
|
socketEngine = QAbstractSocketEngine::createSocketEngine(q->socketType(), proxyInUse, q);
|
||||||
#ifndef QT_NO_BEARERMANAGEMENT
|
|
||||||
//copy network session down to the socket engine (if it has been set)
|
|
||||||
socketEngine->setProperty("_q_networksession", q->property("_q_networksession"));
|
|
||||||
#endif
|
|
||||||
if (!socketEngine) {
|
if (!socketEngine) {
|
||||||
socketError = QAbstractSocket::UnsupportedSocketOperationError;
|
socketError = QAbstractSocket::UnsupportedSocketOperationError;
|
||||||
q->setErrorString(QAbstractSocket::tr("Operation on socket is not supported"));
|
q->setErrorString(QAbstractSocket::tr("Operation on socket is not supported"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#ifndef QT_NO_BEARERMANAGEMENT
|
||||||
|
//copy network session down to the socket engine (if it has been set)
|
||||||
|
socketEngine->setProperty("_q_networksession", q->property("_q_networksession"));
|
||||||
|
#endif
|
||||||
#ifndef QT_NO_NETWORKPROXY
|
#ifndef QT_NO_NETWORKPROXY
|
||||||
//copy user agent to socket engine (if it has been set)
|
//copy user agent to socket engine (if it has been set)
|
||||||
socketEngine->setProperty("_q_user-agent", q->property("_q_user-agent"));
|
socketEngine->setProperty("_q_user-agent", q->property("_q_user-agent"));
|
||||||
@ -1609,15 +1609,15 @@ bool QAbstractSocket::setSocketDescriptor(int socketDescriptor, SocketState sock
|
|||||||
|
|
||||||
d->resetSocketLayer();
|
d->resetSocketLayer();
|
||||||
d->socketEngine = QAbstractSocketEngine::createSocketEngine(socketDescriptor, this);
|
d->socketEngine = QAbstractSocketEngine::createSocketEngine(socketDescriptor, this);
|
||||||
#ifndef QT_NO_BEARERMANAGEMENT
|
|
||||||
//copy network session down to the socket engine (if it has been set)
|
|
||||||
d->socketEngine->setProperty("_q_networksession", property("_q_networksession"));
|
|
||||||
#endif
|
|
||||||
if (!d->socketEngine) {
|
if (!d->socketEngine) {
|
||||||
d->socketError = UnsupportedSocketOperationError;
|
d->socketError = UnsupportedSocketOperationError;
|
||||||
setErrorString(tr("Operation on socket is not supported"));
|
setErrorString(tr("Operation on socket is not supported"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#ifndef QT_NO_BEARERMANAGEMENT
|
||||||
|
//copy network session down to the socket engine (if it has been set)
|
||||||
|
d->socketEngine->setProperty("_q_networksession", property("_q_networksession"));
|
||||||
|
#endif
|
||||||
bool result = d->socketEngine->initialize(socketDescriptor, socketState);
|
bool result = d->socketEngine->initialize(socketDescriptor, socketState);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
d->socketError = d->socketEngine->error();
|
d->socketError = d->socketEngine->error();
|
||||||
|
@ -416,6 +416,11 @@ bool QTcpServer::setSocketDescriptor(int socketDescriptor)
|
|||||||
if (d->socketEngine)
|
if (d->socketEngine)
|
||||||
delete d->socketEngine;
|
delete d->socketEngine;
|
||||||
d->socketEngine = QAbstractSocketEngine::createSocketEngine(socketDescriptor, this);
|
d->socketEngine = QAbstractSocketEngine::createSocketEngine(socketDescriptor, this);
|
||||||
|
if (!d->socketEngine) {
|
||||||
|
d->serverSocketError = QAbstractSocket::UnsupportedSocketOperationError;
|
||||||
|
d->serverSocketErrorString = tr("Operation on socket is not supported");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
#ifndef QT_NO_BEARERMANAGEMENT
|
#ifndef QT_NO_BEARERMANAGEMENT
|
||||||
//copy network session down to the socket engine (if it has been set)
|
//copy network session down to the socket engine (if it has been set)
|
||||||
d->socketEngine->setProperty("_q_networksession", property("_q_networksession"));
|
d->socketEngine->setProperty("_q_networksession", property("_q_networksession"));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user