From 9aa97da7ce17e0039fd8d588418d6c74efd36c6c Mon Sep 17 00:00:00 2001 From: Stephan Reiter <stephan.reiter@gmail.com> Date: Mon, 17 Jul 2017 17:14:40 +0200 Subject: [PATCH] Do not send empty WebChannelIPCTransportHost_SendMessage Task-number: QTBUG-61969 Change-Id: I3367889041614a5e7489909dd38c8af638edf17c Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> --- src/core/renderer/web_channel_ipc_transport.cpp | 13 +++++++++---- .../web_channel_ipc_transport_host.cpp | 1 + 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/core/renderer/web_channel_ipc_transport.cpp b/src/core/renderer/web_channel_ipc_transport.cpp index 173b403a5..f34e1310b 100644 --- a/src/core/renderer/web_channel_ipc_transport.cpp +++ b/src/core/renderer/web_channel_ipc_transport.cpp @@ -68,25 +68,30 @@ private: WebChannelTransport() { } virtual gin::ObjectTemplateBuilder GetObjectTemplateBuilder(v8::Isolate *isolate) override; - void NativeQtSendMessage(gin::Arguments *args) + bool NativeQtSendMessage(gin::Arguments *args) { content::RenderView *renderView = GetRenderView(args->isolate()); if (!renderView || args->Length() != 1) - return; + return false; v8::Handle<v8::Value> val; args->GetNext(&val); if (!val->IsString() && !val->IsStringObject()) - return; + return false; v8::String::Utf8Value utf8(val->ToString()); QByteArray valueData(*utf8, utf8.length()); QJsonParseError error; QJsonDocument doc = QJsonDocument::fromJson(valueData, &error); - if (error.error != QJsonParseError::NoError) + if (error.error != QJsonParseError::NoError) { qWarning("%s %d: Parsing error: %s",__FILE__, __LINE__, qPrintable(error.errorString())); + return false; + } int size = 0; const char *rawData = doc.rawData(&size); + if (size == 0) + return false; renderView->Send(new WebChannelIPCTransportHost_SendMessage(renderView->GetRoutingID(), std::vector<char>(rawData, rawData + size))); + return true; } DISALLOW_COPY_AND_ASSIGN(WebChannelTransport); diff --git a/src/core/renderer_host/web_channel_ipc_transport_host.cpp b/src/core/renderer_host/web_channel_ipc_transport_host.cpp index aef16f0a0..1cd4e4063 100644 --- a/src/core/renderer_host/web_channel_ipc_transport_host.cpp +++ b/src/core/renderer_host/web_channel_ipc_transport_host.cpp @@ -87,6 +87,7 @@ void WebChannelIPCTransportHost::sendMessage(const QJsonObject &message) void WebChannelIPCTransportHost::onWebChannelMessage(const std::vector<char> &message) { + Q_ASSERT(!message.empty()); QJsonDocument doc = QJsonDocument::fromRawData(message.data(), message.size(), QJsonDocument::BypassValidation); Q_ASSERT(doc.isObject()); Q_EMIT messageReceived(doc.object(), this); -- GitLab