diff options
author | Lorn Potter <lorn.potter@gmail.com> | 2022-07-26 15:52:44 +1000 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-08-16 08:30:28 +0000 |
commit | 3a8baec17b6a58146c31646aa3b52b687ccb610e (patch) | |
tree | 95e7ca5381dbce551702da030b8c4704614e89cd /src/websockets | |
parent | c179533eefd1a75b1ac2e83467e96682f08f52a0 (diff) | |
download | qtwebsockets-3a8baec17b6a58146c31646aa3b52b687ccb610e.tar.gz |
wasm: fix use after free
Task-number: QTBUG-105087
Change-Id: Ib9e06b90938b66394d2be9eb7f4f3a283ee80626
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
(cherry picked from commit 4d943068949ca2411ca69c902def9d7e7c826e44)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/websockets')
-rw-r--r-- | src/websockets/qwebsocket_wasm_p.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/websockets/qwebsocket_wasm_p.cpp b/src/websockets/qwebsocket_wasm_p.cpp index d7f86a0..8176f93 100644 --- a/src/websockets/qwebsocket_wasm_p.cpp +++ b/src/websockets/qwebsocket_wasm_p.cpp @@ -151,16 +151,16 @@ void QWebSocketPrivate::open(const QNetworkRequest &request, return; } - EmscriptenWebSocketCreateAttributes *attr = new EmscriptenWebSocketCreateAttributes; + EmscriptenWebSocketCreateAttributes attr; - emscripten_websocket_init_create_attributes(attr); // memset - - attr->url = url.toString(QUrl::FullyEncoded).toUtf8().constData(); + emscripten_websocket_init_create_attributes(&attr); // memset + QByteArray thisUrl = url.toString(QUrl::FullyEncoded).toUtf8(); + attr.url = thisUrl.constData(); #if QT_CONFIG(thread) // see https://github.com/emscripten-core/emscripten/blob/main/system/include/emscripten/websocket.h // choose a default: create websocket on calling thread - attr->createOnMainThread = false; + attr.createOnMainThread = false; #endif // HTML WebSockets do not support arbitrary request headers, but // do support the WebSocket protocol header. This header is @@ -169,20 +169,22 @@ void QWebSocketPrivate::open(const QNetworkRequest &request, // add user subprotocol options QStringList protocols = handshakeOptions().subprotocols(); + QByteArray secProto; if (request.hasRawHeader("Sec-WebSocket-Protocol")) { - QByteArray secProto = request.rawHeader("Sec-WebSocket-Protocol"); + secProto = request.rawHeader("Sec-WebSocket-Protocol"); if (!protocols.contains(secProto)) { protocols.append(QString::fromLatin1(secProto)); } } if (!protocols.isEmpty()) { // comma-separated list of protocol strings, no spaces - attr->protocols = protocols.join(QStringLiteral(",")).toLatin1().constData(); + secProto = protocols.join(QStringLiteral(",")).toLatin1(); + attr.protocols = secProto.constData(); } // create and connect setSocketState(QAbstractSocket::ConnectingState); - m_socketContext = emscripten_websocket_new(attr); + m_socketContext = emscripten_websocket_new(&attr); if (m_socketContext <= 0) { // m_readyState might not be changed yet // error |