summaryrefslogtreecommitdiffstats
path: root/src/network/access/qhttpthreaddelegate.cpp
diff options
context:
space:
mode:
authorMartin Petersson <Martin.Petersson@nokia.com>2011-12-07 16:09:29 +0100
committerQt by Nokia <qt-info@nokia.com>2011-12-07 16:27:37 +0100
commit44bd7c66e20c9fcd4b914d8ac87d5e7989aae11e (patch)
tree9e94e7607af2186c23aa690815fd47a9401fa12d /src/network/access/qhttpthreaddelegate.cpp
parentebfdb73b75e5ae47ffb6d38c84dad12d21786edc (diff)
QNetworkAccessManager: check the buffer size before allocate
The downloadBuffer size should not be larger then the downloadBufferMaximumSize. I also added a try catch for the allocation incase we are low on memory, so that we don't crash. Task-number: QTBUG-23040 Change-Id: Ib9820bc19fc5db994ede20f123f8c167a8d43ff7 Reviewed-by: Peter Hartmann <peter.hartmann@nokia.com>
Diffstat (limited to 'src/network/access/qhttpthreaddelegate.cpp')
-rw-r--r--src/network/access/qhttpthreaddelegate.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/network/access/qhttpthreaddelegate.cpp b/src/network/access/qhttpthreaddelegate.cpp
index e03b3fc59d..f0755337fc 100644
--- a/src/network/access/qhttpthreaddelegate.cpp
+++ b/src/network/access/qhttpthreaddelegate.cpp
@@ -472,11 +472,15 @@ void QHttpThreadDelegate::headerChangedSlot()
// Is using a zerocopy buffer allowed by user and possible with this reply?
if (httpReply->supportsUserProvidedDownloadBuffer()
- && downloadBufferMaximumSize > 0) {
- char *buf = new char[httpReply->contentLength()]; // throws if allocation fails
- if (buf) {
- downloadBuffer = QSharedPointer<char>(buf, downloadBufferDeleter);
- httpReply->setUserProvidedDownloadBuffer(buf);
+ && (downloadBufferMaximumSize > 0) && (httpReply->contentLength() <= downloadBufferMaximumSize)) {
+ QT_TRY {
+ char *buf = new char[httpReply->contentLength()]; // throws if allocation fails
+ if (buf) {
+ downloadBuffer = QSharedPointer<char>(buf, downloadBufferDeleter);
+ httpReply->setUserProvidedDownloadBuffer(buf);
+ }
+ } QT_CATCH(const std::bad_alloc &) {
+ // in out of memory situations, don't use downloadbuffer.
}
}