From 44bd7c66e20c9fcd4b914d8ac87d5e7989aae11e Mon Sep 17 00:00:00 2001 From: Martin Petersson Date: Wed, 7 Dec 2011 16:09:29 +0100 Subject: 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 --- src/network/access/qhttpthreaddelegate.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/network/access/qhttpthreaddelegate.cpp') 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(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(buf, downloadBufferDeleter); + httpReply->setUserProvidedDownloadBuffer(buf); + } + } QT_CATCH(const std::bad_alloc &) { + // in out of memory situations, don't use downloadbuffer. } } -- cgit v1.2.3