diff options
-rw-r--r-- | src/network/access/qnetworkreplyhttpimpl.cpp | 7 | ||||
-rw-r--r-- | tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp | 27 |
2 files changed, 31 insertions, 3 deletions
diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp index e609653aa4..b7626cd060 100644 --- a/src/network/access/qnetworkreplyhttpimpl.cpp +++ b/src/network/access/qnetworkreplyhttpimpl.cpp @@ -326,6 +326,7 @@ qint64 QNetworkReplyHttpImpl::readData(char* data, qint64 maxlen) d->error(QNetworkReplyImpl::NetworkError::UnknownContentError, QCoreApplication::translate("QHttp", "Decompression failed: %1") .arg(d->decompressHelper.errorString())); + d->decompressHelper.clear(); return -1; } if (d->cacheSaveDevice) { @@ -1050,6 +1051,7 @@ void QNetworkReplyHttpImplPrivate::replyDownloadData(QByteArray d) error(QNetworkReplyImpl::NetworkError::UnknownContentError, QCoreApplication::translate("QHttp", "Decompression failed: %1") .arg(decompressHelper.errorString())); + decompressHelper.clear(); return; } @@ -1069,6 +1071,7 @@ void QNetworkReplyHttpImplPrivate::replyDownloadData(QByteArray d) error(QNetworkReplyImpl::NetworkError::UnknownContentError, QCoreApplication::translate("QHttp", "Data downloaded is too large to store")); + decompressHelper.clear(); return; } d.resize(nextSize); @@ -1077,6 +1080,7 @@ void QNetworkReplyHttpImplPrivate::replyDownloadData(QByteArray d) error(QNetworkReplyImpl::NetworkError::UnknownContentError, QCoreApplication::translate("QHttp", "Decompression failed: %1") .arg(decompressHelper.errorString())); + decompressHelper.clear(); return; } } @@ -2115,9 +2119,6 @@ void QNetworkReplyHttpImplPrivate::error(QNetworkReplyImpl::NetworkError code, c return; } - if (decompressHelper.isValid()) - decompressHelper.clear(); // Just get rid of any data that might be stored - errorCode = code; q->setErrorString(errorMessage); diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index d2bcd9ec81..d0bc342afe 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -512,6 +512,8 @@ private Q_SLOTS: void contentEncodingError_data(); void contentEncodingError(); void compressedReadyRead(); + void notFoundWithCompression_data(); + void notFoundWithCompression(); // NOTE: This test must be last! void parentingRepliesToTheApp(); @@ -9929,6 +9931,31 @@ void tst_QNetworkReply::compressedReadyRead() QCOMPARE(received, expected); } +void tst_QNetworkReply::notFoundWithCompression_data() +{ + contentEncoding_data(); +} + +void tst_QNetworkReply::notFoundWithCompression() +{ + QFETCH(QByteArray, encoding); + QFETCH(QByteArray, body); + QString header("HTTP/1.0 404 OK\r\nContent-Encoding: %1\r\nContent-Length: %2\r\n\r\n"); + header = header.arg(encoding, QString::number(body.size())); + + MiniHttpServer server(header.toLatin1() + body); + + QNetworkRequest request( + QUrl(QLatin1String("http://localhost:%1").arg(QString::number(server.serverPort())))); + QNetworkReplyPtr reply(manager.get(request)); + + QTRY_VERIFY2_WITH_TIMEOUT(reply->isFinished(), qPrintable(reply->errorString()), 15000); + QCOMPARE(reply->error(), QNetworkReply::ContentNotFoundError); + + QFETCH(QByteArray, expected); + QCOMPARE(reply->readAll(), expected); +} + // NOTE: This test must be last testcase in tst_qnetworkreply! void tst_QNetworkReply::parentingRepliesToTheApp() { |