Details
Description
The WASM networking code crashes on us. Especially in more complex setups (5.14 also did not work without modifications from my side):
QNetworkReplyWasmImplPrivate::doSendRequest()
does not correctly handle headers.
if (headersData.count() > 0) { const char* customHeaders[arrayLength]; int i = 0; for (i; i < headersData.count() * 2; (i = i + 2)) { customHeaders[i] = headersData[i].constData(); customHeaders[i + 1] = request.rawHeader(headersData[i]).constData(); } customHeaders[i] = nullptr; attr.requestHeaders = customHeaders; }
This code cannot work as headerData is accessed with i which can go twice as high as headerData.count()
I'm also not sure whether its save to define customHeaders like this, especially not in the context of emscripten, but I assume the headers need to be allocated somehow.
if (outgoingData) { // data from post request // handle extra data QByteArray extraData; extraData = outgoingData->readAll(); // is there a size restriction here? if (!extraData.isEmpty()) { attr.requestData = extraData.constData(); attr.requestDataSize = extraData.size(); } }
This code also looks dangerous and unlikely to reliably work. extraData is going out of scope, I'm not sure the constData pointer object will survive that, but it non-WASM environments this is very likely to crash.
m_fetch = emscripten_fetch(&attr, request.url().toString().toUtf8());
Same here. Its not clear whether emscripten_fetch copies the provided url. If not this is likely to crash.
I would provide a fix, but currently we have a lot of remaining issues which are not fixed, by the above changes (except for a simple test case).