summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@gmail.com>2022-07-26 15:52:44 +1000
committerLorn Potter <lorn.potter@gmail.com>2022-08-08 09:23:31 +1000
commit4d943068949ca2411ca69c902def9d7e7c826e44 (patch)
tree88928897b4b86fdcf1d9539bc0d813277ed56e2e /src
parent55cef3a13c8377c55b2fe050751c8a05eb7f9fce (diff)
downloadqtwebsockets-4d943068949ca2411ca69c902def9d7e7c826e44.tar.gz
wasm: fix use after free
Pick-to: 6.4 Task-number: QTBUG-105087 Change-Id: Ib9e06b90938b66394d2be9eb7f4f3a283ee80626 Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/websockets/qwebsocket_wasm_p.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/websockets/qwebsocket_wasm_p.cpp b/src/websockets/qwebsocket_wasm_p.cpp
index 4a69ed1..113db60 100644
--- a/src/websockets/qwebsocket_wasm_p.cpp
+++ b/src/websockets/qwebsocket_wasm_p.cpp
@@ -150,16 +150,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
@@ -168,20 +168,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