From 4a631c3a6e52ae53a2bad45e185cd51927d94bff Mon Sep 17 00:00:00 2001 From: Mikhail Korobov Date: Tue, 18 Aug 2015 03:20:21 +0500 Subject: Fix QNetworkReply::abort and QNetworkReply::close Don't read from closed QNetworkReply instances. This fixes QWebView hangs on some of the web sites when reply->abort() or reply->close() is called. [ChangeLog][QtWebKit] fixed reply->abort() and reply->close() handling. Change-Id: I8d46ad115954369b9de0b5a74b118fc3bf2f1092 Task-number: QTBUG-47654 Reviewed-by: Allan Sandfeld Jensen --- Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp | 4 ++++ Source/WebCore/platform/network/qt/QtMIMETypeSniffer.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp b/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp index e24d0b1c8..e07bc76a9 100644 --- a/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp +++ b/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp @@ -683,6 +683,10 @@ void QNetworkReplyHandler::forwardData() { ASSERT(m_replyWrapper && m_replyWrapper->reply() && !wasAborted() && !m_replyWrapper->wasRedirected()); + // reply may be closed if reply->close() or reply->abort() is called + if (!m_replyWrapper->reply()->isReadable()) + return; + ResourceHandleClient* client = m_resourceHandle->client(); if (!client) return; diff --git a/Source/WebCore/platform/network/qt/QtMIMETypeSniffer.cpp b/Source/WebCore/platform/network/qt/QtMIMETypeSniffer.cpp index 60ab727ce..bd119a8e1 100644 --- a/Source/WebCore/platform/network/qt/QtMIMETypeSniffer.cpp +++ b/Source/WebCore/platform/network/qt/QtMIMETypeSniffer.cpp @@ -41,6 +41,10 @@ QtMIMETypeSniffer::QtMIMETypeSniffer(QNetworkReply* reply, const QString& advert bool QtMIMETypeSniffer::sniff() { + // reply may be closed if reply->close() or reply->abort() is called + if (!m_reply->isReadable()) + return true; + // See QNetworkReplyWrapper::setFinished(). const bool isReplyFinished = m_reply->property("_q_isFinished").toBool(); -- cgit v1.2.3