diff options
author | Mikhail Korobov <kmike84@gmail.com> | 2015-08-18 03:20:21 +0500 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-08-26 09:21:17 +0000 |
commit | 4a631c3a6e52ae53a2bad45e185cd51927d94bff (patch) | |
tree | b9572eb0c5c4016dfe92347ffcbf01bdcdf5a0c9 | |
parent | c117978bb8781134f74dfd0313c00476d3df6364 (diff) |
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 <allan.jensen@theqtcompany.com>
-rw-r--r-- | Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp | 4 | ||||
-rw-r--r-- | Source/WebCore/platform/network/qt/QtMIMETypeSniffer.cpp | 4 |
2 files changed, 8 insertions, 0 deletions
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(); |