From 30b0376f2b20013b6e687979f0be53791a48b3f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98ystein=20Heskestad?= Date: Mon, 21 Jun 2021 08:53:10 +0200 Subject: Clear frame before emitting signals to prevent duplicating messages [ChangeLog] Clear frame before emitting signals to prevent duplicating messages Fixes: QTBUG-87279 Change-Id: Iab296f443943eeec3b2a0fbb4f79c5abb2605ca7 (cherry picked from commit d196801706821a890bda8b22508c2957a50eff25) Reviewed-by: Allan Sandfeld Jensen --- src/websockets/qwebsocketdataprocessor.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/websockets/qwebsocketdataprocessor.cpp b/src/websockets/qwebsocketdataprocessor.cpp index b2a9b57..1141335 100644 --- a/src/websockets/qwebsocketdataprocessor.cpp +++ b/src/websockets/qwebsocketdataprocessor.cpp @@ -202,6 +202,7 @@ bool QWebSocketDataProcessor::process(QIODevice *pIoDevice) return true; } + bool isFinalFrame = frame.isFinalFrame(); if (m_opCode == QWebSocketProtocol::OpCodeText) { QString frameTxt = m_pTextCodec->toUnicode(frame.payload().constData(), frame.payload().size(), @@ -215,14 +216,17 @@ bool QWebSocketDataProcessor::process(QIODevice *pIoDevice) return true; } else { m_textMessage.append(frameTxt); - Q_EMIT textFrameReceived(frameTxt, frame.isFinalFrame()); + frame.clear(); + Q_EMIT textFrameReceived(frameTxt, isFinalFrame); } } else { m_binaryMessage.append(frame.payload()); - Q_EMIT binaryFrameReceived(frame.payload(), frame.isFinalFrame()); + QByteArray payload = frame.payload(); + frame.clear(); + Q_EMIT binaryFrameReceived(payload, isFinalFrame); } - if (frame.isFinalFrame()) { + if (isFinalFrame) { isDone = true; if (m_opCode == QWebSocketProtocol::OpCodeText) { const QString textMessage(m_textMessage); -- cgit v1.2.3