4
0
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:
Tasuku Suzuki 2020-02-12 17:06:32 +09:00
parent bf9bb2acb6
commit 4b87afbbe6
2 changed files with 20 additions and 1 deletions
src/httpserver
tests/auto/qabstracthttpserver

@ -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)