summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIevgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>2024-01-23 15:22:09 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-01-24 10:28:41 +0000
commit1f709e4e1cbe58172fc0e2adcb737081403b39cb (patch)
tree9d0a643ed338130e57ad84ae178eee9b24c3c802
parent75a0b431b7ee3e192531ab004519772252eb5f74 (diff)
QHttpServerRouterRule: Ensure responder is moved out of
Ensure that the responder is moved out of when route is handled. Websocket handling code assumes that this is the case. Failing to do so results in two handlers connected to the socket's readyRead() signal. Fixes: QTBUG-120746 Pick-to: 6.6 6.5 Change-Id: Ib2414991e442bdc826ee124dcbb3910bfaa04a3f Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> (cherry picked from commit e0d159c9fab6c806952766a6dbcc1319ac278a99) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/httpserver/qhttpserverrouterrule.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/httpserver/qhttpserverrouterrule.cpp b/src/httpserver/qhttpserverrouterrule.cpp
index 2011864..5cb3a30 100644
--- a/src/httpserver/qhttpserverrouterrule.cpp
+++ b/src/httpserver/qhttpserverrouterrule.cpp
@@ -2,6 +2,7 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtHttpServer/qhttpserverrouterrule.h>
+#include <QtHttpServer/qhttpserverresponder.h>
#include <private/qhttpserverrouterrule_p.h>
#include <private/qhttpserverrequest_p.h>
@@ -152,7 +153,11 @@ bool QHttpServerRouterRule::exec(const QHttpServerRequest &request,
if (!matches(request, &match))
return false;
- d->routerHandler(match, request, std::move(responder));
+ // Ensure that original responder object is destroyed even if the route
+ // handler does not explicitly move out of it. The websocket handler code
+ // assumes this is the case (see also QTBUG-120746).
+ auto r = std::move(responder);
+ d->routerHandler(match, request, std::move(r));
return true;
}