mirror of
https://github.com/QuasarApp/qthttpserver.git
synced 2025-05-01 20:39:33 +00:00
Fix crash when CONNECT method is used
When the parser received "CONNECT / HTTP/1.1\n\n", its upgrade variable is set to 1 even though there is no "upgrade" header available. In this case, QMap::find() returns its end. Task-number: QTBUG-82053 Change-Id: I41cc23511459c6735a474bb7b903638dd4b1208f Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
parent
bf9bb2acb6
commit
4b87afbbe6
@ -116,8 +116,8 @@ void QAbstractHttpServerPrivate::handleReadyRead(QTcpSocket *socket,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
qCWarning(lcHttpServer, "Upgrade to %s not supported", it.value().second.constData());
|
qCWarning(lcHttpServer, "Upgrade to %s not supported", it.value().second.constData());
|
||||||
|
}
|
||||||
socket->disconnectFromHost();
|
socket->disconnectFromHost();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -62,6 +62,7 @@ private slots:
|
|||||||
void websocket();
|
void websocket();
|
||||||
void servers();
|
void servers();
|
||||||
void fork();
|
void fork();
|
||||||
|
void qtbug82053();
|
||||||
};
|
};
|
||||||
|
|
||||||
void tst_QAbstractHttpServer::request_data()
|
void tst_QAbstractHttpServer::request_data()
|
||||||
@ -244,6 +245,24 @@ void tst_QAbstractHttpServer::fork()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QAbstractHttpServer::qtbug82053()
|
||||||
|
{
|
||||||
|
struct HttpServer : QAbstractHttpServer
|
||||||
|
{
|
||||||
|
bool handleRequest(const QHttpServerRequest &, QTcpSocket *) override { return false; }
|
||||||
|
} server;
|
||||||
|
auto tcpServer = new QTcpServer;
|
||||||
|
tcpServer->listen();
|
||||||
|
server.bind(tcpServer);
|
||||||
|
|
||||||
|
auto client = new QTcpSocket;
|
||||||
|
client->connectToHost(QHostAddress::LocalHost, tcpServer->serverPort());
|
||||||
|
client->waitForConnected();
|
||||||
|
client->write("CONNECT / HTTP/1.1\n\n");
|
||||||
|
client->waitForBytesWritten();
|
||||||
|
QTest::qWait(0);
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
QTEST_MAIN(tst_QAbstractHttpServer)
|
QTEST_MAIN(tst_QAbstractHttpServer)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user