From 457e6f8b199ae321ae74507d5ef2a3940279e54c 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 Change-Id: I85599ea5ca7a4b79a8bbfffd178af437984080fb Reviewed-by: Shawn Rutledge (away) (cherry picked from commit 9aaf12ebaadf25db67932d6985d9aed424873d50) Reviewed-by: Ahmad Samir --- 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 1255cd827ac..24dc9c26431 100644 --- a/src/gui/image/qimagereaderwriterhelpers.cpp +++ b/src/gui/image/qimagereaderwriterhelpers.cpp @@ -97,6 +97,8 @@ QList supportedImageFormats(Capability cap) return formats; } +QT_WARNING_PUSH +QT_WARNING_DISABLE_GCC("-Warray-bounds") // QTBUG-116763 QList supportedMimeTypes(Capability cap) { QList mimeTypes; @@ -112,6 +114,7 @@ QList supportedMimeTypes(Capability cap) mimeTypes.erase(std::unique(mimeTypes.begin(), mimeTypes.end()), mimeTypes.end()); return mimeTypes; } +QT_WARNING_POP QList imageFormatsForMimeType(const QByteArray &mimeType, Capability cap) {