QHttpThreadDelegate: use new(std::nothrow) instead of try..catch

We usually compile without exceptions, so the try..catch is a noop.
So, if the `new` fails we would crash (or get UB) anyway. Instead
of that, use the nothrow version of `new` and check the result.

Pick-to: 6.5
Change-Id: I1902b717c70afcc44c1f3237370aae346262452a
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
(cherry picked from commit 51c812af0747573ccf07fc232d860170c4ba2877)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Mårten Nordheim 2023-10-03 13:13:16 +02:00 committed by Qt Cherry-pick Bot
parent 3d3837287a
commit cb4cb61883

View File

@ -584,14 +584,11 @@ void QHttpThreadDelegate::headerChangedSlot()
// Is using a zerocopy buffer allowed by user and possible with this reply?
if (httpReply->supportsUserProvidedDownloadBuffer()
&& (downloadBufferMaximumSize > 0) && (httpReply->contentLength() <= downloadBufferMaximumSize)) {
QT_TRY {
char *buf = new char[httpReply->contentLength()]; // throws if allocation fails
if (buf) {
downloadBuffer = QSharedPointer<char>(buf, [](auto p) { delete[] p; });
httpReply->setUserProvidedDownloadBuffer(buf);
}
} QT_CATCH(const std::bad_alloc &) {
// in out of memory situations, don't use downloadbuffer.
char *buf = new (std::nothrow) char[httpReply->contentLength()];
// in out of memory situations, don't use downloadBuffer.
if (buf) {
downloadBuffer = QSharedPointer<char>(buf, [](auto p) { delete[] p; });
httpReply->setUserProvidedDownloadBuffer(buf);
}
}