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