Fix crash when a network-request is aborted while forwarding data
authorAllan Sandfeld Jensen <allan.jensen@digia.com>
Mon, 13 Oct 2014 13:32:14 +0000 (15:32 +0200)
committerFelix Geyer <fgeyer@debian.org>
Wed, 1 Apr 2015 17:44:29 +0000 (17:44 +0000)
Since we forward data block-wise a network request may be aborted while
we are still forwarding received data. In that case we should stop the
forwarding.

Task-number: QTBUG-41877
Change-Id: Ia34bbdcacdc4eb70a2e814d3b4bada9844abbb83
Reviewed-by: Michael Bruning <michael.bruning@digia.com>
Gbp-Pq: Name fix_crash_when_a_network_request_is_aborted_while_forwarding_data.patch

Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp

index 5990a40756179f39ded395190afd4c469c9b9c30..fc69546103198167d29b63000b1478373ca0ffaa 100644 (file)
@@ -687,9 +687,12 @@ void QNetworkReplyHandler::forwardData()
         // -1 means we do not provide any data about transfer size to inspector so it would use
         // Content-Length headers or content size to show transfer size.
         client->didReceiveData(m_resourceHandle, buffer, readSize, -1);
+        // Check if the request has been aborted or this reply-handler was otherwise released.
+        if (wasAborted() || !m_replyWrapper)
+            break;
     }
     delete[] buffer;
-    if (bytesAvailable > 0)
+    if (bytesAvailable > 0 && m_replyWrapper)
         m_queue.requeue(&QNetworkReplyHandler::forwardData);
 }