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.6 6.5
Change-Id: I1902b717c70afcc44c1f3237370aae346262452a
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
This commit is contained in:
Mårten Nordheim 2023-10-03 13:13:16 +02:00
parent 72d51f1c42
commit 51c812af07

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);
}
}