diff options
author | Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io> | 2024-01-23 15:22:09 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-01-24 10:28:41 +0000 |
commit | 1f709e4e1cbe58172fc0e2adcb737081403b39cb (patch) | |
tree | 9d0a643ed338130e57ad84ae178eee9b24c3c802 | |
parent | 75a0b431b7ee3e192531ab004519772252eb5f74 (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.cpp | 7 |
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; } |