From 9aaf12ebaadf25db67932d6985d9aed424873d50 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 4 Oct 2023 09:25:29 -0700 Subject: [PATCH] Work around GCC 13's bogus "out of bounds" check to QByteArray::_empty MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nothing here is empty and even if anything were, QStringBuilder properly handles empty strings. In static member function ‘static void QConcatenable::appendTo(QByteArrayView, char*&)’, inlined from ‘static void QConcatenable, > >::appendTo(const type&, T*&) [with T = char; A = QByteArrayView; B = const char (&)[20]]’ at qstringbuilder.h:398:37, inlined from ‘T QStringBuilder< , >::convertTo() const [with T = QByteArray; A = QByteArrayView; B = const char (&)[20]]’ at qstringbuilder.h:117:54, ... qstringbuilder.h:178:19: error: ‘void* memcpy(void*, const void*, size_t)’ forming offset [1, 5] is out of the bounds [0, 1] of object ‘QByteArray::_empty’ with type ‘const char’ [-Werror=array-bounds=] QStringBuilder::convertTo() creates the target as const qsizetype len = QConcatenable< QStringBuilder >::size(*this); T s(len, Qt::Uninitialized); We know len can't be zero because GCC is complaining about a memcpy() when the offset has been changed from 0, meaning QByteArray was given a non-zero size and therefore its data pointer is not &QByteArray::_empty. Fixes: QTBUG-116763 Pick-to: 6.5 6.6 Change-Id: I85599ea5ca7a4b79a8bbfffd178af437984080fb Reviewed-by: Shawn Rutledge (away) --- src/gui/image/qimagereaderwriterhelpers.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/image/qimagereaderwriterhelpers.cpp b/src/gui/image/qimagereaderwriterhelpers.cpp index 502b0f95f0..9074f1cfe6 100644 --- a/src/gui/image/qimagereaderwriterhelpers.cpp +++ b/src/gui/image/qimagereaderwriterhelpers.cpp @@ -99,6 +99,8 @@ QList supportedImageFormats(Capability cap) static constexpr QByteArrayView imagePrefix() noexcept { return "image/"; } +QT_WARNING_PUSH +QT_WARNING_DISABLE_GCC("-Warray-bounds") // QTBUG-116763 QList supportedMimeTypes(Capability cap) { QList mimeTypes; @@ -114,6 +116,7 @@ QList supportedMimeTypes(Capability cap) mimeTypes.erase(std::unique(mimeTypes.begin(), mimeTypes.end()), mimeTypes.end()); return mimeTypes; } +QT_WARNING_POP QList imageFormatsForMimeType(QByteArrayView mimeType, Capability cap) {