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>bb10
parent
e5f295c8a4
commit
a6776de0c7
|
|
@ -677,7 +677,7 @@ bool QCacheItem::read(QFileDevice *device, bool readData)
|
|||
if (!device->fileName().endsWith(expectedFilename))
|
||||
return false;
|
||||
|
||||
return metaData.isValid();
|
||||
return metaData.isValid() && !metaData.rawHeaders().isEmpty();
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue