diff options
author | Mårten Nordheim <marten.nordheim@qt.io> | 2023-03-03 19:08:23 +0100 |
---|---|---|
committer | Mårten Nordheim <marten.nordheim@qt.io> | 2023-03-09 15:24:45 +0000 |
commit | a6776de0c70d23ac197682c7bef603450cb8b03f (patch) | |
tree | bcf13f558c4e986a714cb62454c59e3cf0fc04ca /src/network/access/qnetworkreplyhttpimpl.cpp | |
parent | e5f295c8a458dcd336f7cf3768ca62aded69e659 (diff) |
QNetwork[http]: Discard or ignore corrupted cache entries
In an attempt to avoid situations like the linked bug-report from
happening again, discard cached entries with no headers and ignore
entries where the payload is smaller than what the header specified (if
it specified anything).
In a future revision we might want to add a length to the cache's
metadata, potentially with a checksum trailing the content.
Task-number: QTBUG-111397
Pick-to: 6.5 6.4 6.2
Change-Id: Ie40149ffdaff7886bcd44cbd45605bdb7918e105
Reviewed-by: Konrad Kujawa <konrad.kujawa@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Diffstat (limited to 'src/network/access/qnetworkreplyhttpimpl.cpp')
-rw-r--r-- | src/network/access/qnetworkreplyhttpimpl.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp index e0fc272b61..54e70fdcf3 100644 --- a/src/network/access/qnetworkreplyhttpimpl.cpp +++ b/src/network/access/qnetworkreplyhttpimpl.cpp @@ -501,6 +501,12 @@ bool QNetworkReplyHttpImplPrivate::loadFromCacheIfAllowed(QHttpNetworkRequest &h QNetworkHeadersPrivate::RawHeadersList::ConstIterator it; cacheHeaders.setAllRawHeaders(metaData.rawHeaders()); + it = cacheHeaders.findRawHeader("content-length"); + if (it != cacheHeaders.rawHeaders.constEnd()) { + if (nc->data(httpRequest.url())->size() < it->second.toLongLong()) + return false; // The data is smaller than the content-length specified + } + it = cacheHeaders.findRawHeader("etag"); if (it != cacheHeaders.rawHeaders.constEnd()) httpRequest.setHeaderField("If-None-Match", it->second); |